X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Flibvorbis.c;h=1af0f8a32f96ed2604acc9028974057bb30646a0;hb=7b376b398a464a5825ede8b10d5f605c526c7399;hp=b7466cd1b57401d468802c722aa31da906c537b6;hpb=da7548585e1ed0fdb1c337c2f07ab313c99122a5;p=ffmpeg diff --git a/libavcodec/libvorbis.c b/libavcodec/libvorbis.c index b7466cd1b57..1af0f8a32f9 100644 --- a/libavcodec/libvorbis.c +++ b/libavcodec/libvorbis.c @@ -55,7 +55,7 @@ typedef struct OggVorbisContext { } OggVorbisContext ; static const AVOption options[]={ -{"iblock", "Sets the impulse block bias", offsetof(OggVorbisContext, iblock), FF_OPT_TYPE_DOUBLE, 0, -15, 0, AV_OPT_FLAG_ENCODING_PARAM}, +{"iblock", "Sets the impulse block bias", offsetof(OggVorbisContext, iblock), FF_OPT_TYPE_DOUBLE, 0, -15, 0, AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_ENCODING_PARAM}, {NULL} }; static const AVClass class = { "libvorbis", av_default_item_name, options, LIBAVUTIL_VERSION_INT }; @@ -96,6 +96,35 @@ 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) { + char name[32]; + av_get_channel_layout_string(name, sizeof(name), avccontext->channels, + avccontext->channel_layout); + av_log(avccontext, AV_LOG_ERROR, "%s not supported by Vorbis: " + "output stream will have incorrect " + "channel layout.\n", name); + } 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); } @@ -243,7 +272,7 @@ static av_cold int oggvorbis_encode_close(AVCodecContext *avccontext) { } -AVCodec libvorbis_encoder = { +AVCodec ff_libvorbis_encoder = { "libvorbis", AVMEDIA_TYPE_AUDIO, CODEC_ID_VORBIS, @@ -252,7 +281,7 @@ AVCodec libvorbis_encoder = { oggvorbis_encode_frame, oggvorbis_encode_close, .capabilities= CODEC_CAP_DELAY, - .sample_fmts = (const enum SampleFormat[]){SAMPLE_FMT_S16,SAMPLE_FMT_NONE}, + .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE}, .long_name= NULL_IF_CONFIG_SMALL("libvorbis Vorbis"), .priv_class= &class, } ;