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.

-- 
Måns Rullgård
[email protected]
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to