mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-02-17 12:27:18 +00:00
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@khirnov.net>
This commit is contained in:
parent
0fedf754b2
commit
df64da3b1e
@ -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
|
||||
|
@ -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++)
|
||||
|
Loading…
Reference in New Issue
Block a user