On Fri, Jun 17, 2011 at 09:54:43AM +0100, Måns Rullgård wrote: > Kostya Shishkov <[email protected]> writes: > > > This is needed because not all players (e.g. MPlayer) are able to > > distinguish > > two different Bink audio decoders when codec_tag is set. > > --- > > libavcodec/binkaudio.c | 2 +- > > libavformat/bink.c | 7 ++++++- > > 2 files changed, 7 insertions(+), 2 deletions(-) > > > > diff --git a/libavcodec/binkaudio.c b/libavcodec/binkaudio.c > > index a05b0b5..9722bdf 100644 > > --- a/libavcodec/binkaudio.c > > +++ b/libavcodec/binkaudio.c > > @@ -90,7 +90,7 @@ static av_cold int decode_init(AVCodecContext *avctx) > > return -1; > > } > > > > - s->version_b = avctx->codec_tag == MKTAG('B','I','K','b'); > > + s->version_b = avctx->extradata && avctx->extradata[3] == 'b'; > > > > if (avctx->codec->id == CODEC_ID_BINKAUDIO_RDFT) { > > // audio is already interleaved for the RDFT format variant > > diff --git a/libavformat/bink.c b/libavformat/bink.c > > index 76b457c..0676738 100644 > > --- a/libavformat/bink.c > > +++ b/libavformat/bink.c > > @@ -134,13 +134,18 @@ static int read_header(AVFormatContext *s, > > AVFormatParameters *ap) > > if (!ast) > > return AVERROR(ENOMEM); > > ast->codec->codec_type = AVMEDIA_TYPE_AUDIO; > > - ast->codec->codec_tag = vst->codec->codec_tag; > > + ast->codec->codec_tag = 0; > > ast->codec->sample_rate = avio_rl16(pb); > > av_set_pts_info(ast, 64, 1, ast->codec->sample_rate); > > flags = avio_rl16(pb); > > ast->codec->codec_id = flags & BINK_AUD_USEDCT ? > > CODEC_ID_BINKAUDIO_DCT : > > CODEC_ID_BINKAUDIO_RDFT; > > ast->codec->channels = flags & BINK_AUD_STEREO ? 2 : 1; > > + ast->codec->extradata = av_mallocz(4 + > > FF_INPUT_BUFFER_PADDING_SIZE); > > + if (!ast->codec->extradata) > > + return AVERROR(ENOMEM); > > + ast->codec->extradata_size = 4; > > + AV_WL32(ast->codec->extradata, vst->codec->codec_tag); > > } > > > > for (i = 0; i < bink->num_audio_tracks; i++) > > -- > > I'm not sure which abuse is worse.
Flip a coin then. I don't know myself. But feel free to read doxy for codec_tag in avcodec.h to make it even more confusing. _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
