[FFmpeg-cvslog] bink: pass Bink version to audio decoder through extradata instead of codec_tag.
Kostya
git at videolan.org
Thu Jul 7 00:15:09 CEST 2011
ffmpeg | branch: master | Kostya <kostya.shishkov at gmail.com> | Fri Jun 17 07:28:58 2011 +0000| [df64da3b1ef0c7014135bce44e5f82becf81fe79] | committer: Anton Khirnov
bink: pass Bink version to audio decoder through extradata instead of codec_tag.
This is needed because not all players (e.g. MPlayer) are able to distinguish
two different Bink audio decoders when codec_tag is set.
Signed-off-by: Anton Khirnov <anton at khirnov.net>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=df64da3b1ef0c7014135bce44e5f82becf81fe79
---
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++)
More information about the ffmpeg-cvslog
mailing list