|
|
|
@ -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"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|