[FFmpeg-devel] [PATCH]Warn if vorbis files with wrong channel layout are encoded
Carl Eugen Hoyos
cehoyos at ag.or.at
Thu Apr 14 21:18:44 CEST 2011
Hi!
I'm going to commit if nobody objects, but I'd be happy if somebody from the
language police comments. (I prefer AV_LOG_ERROR because the resulting streams
are mostly unusable.)
Carl Eugen
-------------- next part --------------
diff --git a/libavcodec/libvorbis.c b/libavcodec/libvorbis.c
index 9324b28..acbaa8c 100644
--- a/libavcodec/libvorbis.c
+++ b/libavcodec/libvorbis.c
@@ -96,6 +96,32 @@ static av_cold int oggvorbis_init_encoder(vorbis_info *vi, AVCodecContext *avcco
vorbis_encode_ctl(vi, OV_ECTL_IBLOCK_SET, &context->iblock);
}
+ if (avccontext->channels == 3 &&
+ avccontext->channel_layout != (AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER) ||
+ avccontext->channels == 4 &&
+ avccontext->channel_layout != AV_CH_LAYOUT_2_2 &&
+ avccontext->channel_layout != AV_CH_LAYOUT_QUAD ||
+ avccontext->channels == 5 &&
+ avccontext->channel_layout != AV_CH_LAYOUT_5POINT0 &&
+ avccontext->channel_layout != AV_CH_LAYOUT_5POINT0_BACK ||
+ avccontext->channels == 6 &&
+ avccontext->channel_layout != AV_CH_LAYOUT_5POINT1 &&
+ avccontext->channel_layout != AV_CH_LAYOUT_5POINT1_BACK ||
+ avccontext->channels == 7 &&
+ avccontext->channel_layout != (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_CENTER) ||
+ avccontext->channels == 8 &&
+ avccontext->channel_layout != AV_CH_LAYOUT_7POINT1) {
+ if (avccontext->channel_layout) {
+ av_log(avccontext, AV_LOG_ERROR, "Channel layout not supported by Vorbis, "
+ "output stream will have incorrect "
+ "channel layout.\n");
+ } else {
+ av_log(avccontext, AV_LOG_WARNING, "No channel layout specified. The encoder "
+ "will use Vorbis channel layout for "
+ "%d channels.\n", avccontext->channels);
+ }
+ }
+
return vorbis_encode_setup_init(vi);
}
More information about the ffmpeg-devel
mailing list