mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
Revise check for codec id in voc demuxer.
This fixes demuxing of packets that do not contain a codec tag and come before the codec_id has been set.
This commit is contained in:
parent
1ae02fe03b
commit
f61cbc22d3
@ -68,7 +68,7 @@ voc_get_packet(AVFormatContext *s, AVPacket *pkt, AVStream *st, int max_size)
|
||||
AVCodecContext *dec = st->codec;
|
||||
ByteIOContext *pb = s->pb;
|
||||
VocType type;
|
||||
int size, tmp_codec;
|
||||
int size, tmp_codec=-1;
|
||||
int sample_rate = 0;
|
||||
int channels = 1;
|
||||
|
||||
@ -90,11 +90,7 @@ voc_get_packet(AVFormatContext *s, AVPacket *pkt, AVStream *st, int max_size)
|
||||
if (sample_rate)
|
||||
dec->sample_rate = sample_rate;
|
||||
dec->channels = channels;
|
||||
tmp_codec = ff_codec_get_id(ff_voc_codec_tags, get_byte(pb));
|
||||
if (dec->codec_id == CODEC_ID_NONE)
|
||||
dec->codec_id = tmp_codec;
|
||||
else if (dec->codec_id != tmp_codec)
|
||||
av_log(s, AV_LOG_WARNING, "Ignoring mid-stream change in audio codec\n");
|
||||
tmp_codec = get_byte(pb);
|
||||
dec->bits_per_coded_sample = av_get_bits_per_sample(dec->codec_id);
|
||||
voc->remaining_size -= 2;
|
||||
max_size -= 2;
|
||||
@ -117,11 +113,7 @@ voc_get_packet(AVFormatContext *s, AVPacket *pkt, AVStream *st, int max_size)
|
||||
dec->sample_rate = get_le32(pb);
|
||||
dec->bits_per_coded_sample = get_byte(pb);
|
||||
dec->channels = get_byte(pb);
|
||||
tmp_codec = ff_codec_get_id(ff_voc_codec_tags, get_le16(pb));
|
||||
if (dec->codec_id == CODEC_ID_NONE)
|
||||
dec->codec_id = tmp_codec;
|
||||
else if (dec->codec_id != tmp_codec)
|
||||
av_log(s, AV_LOG_WARNING, "Ignoring mid-stream change in audio codec\n");
|
||||
tmp_codec = get_le16(pb);
|
||||
url_fskip(pb, 4);
|
||||
voc->remaining_size -= 12;
|
||||
max_size -= 12;
|
||||
@ -133,9 +125,20 @@ voc_get_packet(AVFormatContext *s, AVPacket *pkt, AVStream *st, int max_size)
|
||||
voc->remaining_size = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (tmp_codec >= 0) {
|
||||
tmp_codec = ff_codec_get_id(ff_voc_codec_tags, tmp_codec);
|
||||
if (dec->codec_id == CODEC_ID_NONE)
|
||||
dec->codec_id = tmp_codec;
|
||||
else if (dec->codec_id != tmp_codec)
|
||||
av_log(s, AV_LOG_WARNING, "Ignoring mid-stream change in audio codec\n");
|
||||
if (dec->codec_id == CODEC_ID_NONE) {
|
||||
av_log(s, AV_LOG_ERROR, "Invalid codec_id\n");
|
||||
if (s->audio_codec_id == CODEC_ID_NONE) return AVERROR(EINVAL);
|
||||
if (s->audio_codec_id == CODEC_ID_NONE) {
|
||||
av_log(s, AV_LOG_ERROR, "unknown codec tag\n");
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
av_log(s, AV_LOG_WARNING, "unknown codec tag\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user