diff options
author | Derek Buitenhuis <derek.buitenhuis@gmail.com> | 2016-02-24 18:04:34 +0000 |
---|---|---|
committer | Derek Buitenhuis <derek.buitenhuis@gmail.com> | 2016-02-24 18:04:34 +0000 |
commit | f99195d56f4aab266926724ca1cfae822df4df16 (patch) | |
tree | 34e045aacb2c306e90e761c9ec2810c793fe8117 /libavformat/vocdec.c | |
parent | 745d0c0300852e902199f39d282dc60e64b8c208 (diff) | |
parent | 0d1229f1d2b8f26dd50c6be7917bb8ed8cb95364 (diff) | |
download | ffmpeg-f99195d56f4aab266926724ca1cfae822df4df16.tar.gz |
Merge commit '0d1229f1d2b8f26dd50c6be7917bb8ed8cb95364'
* commit '0d1229f1d2b8f26dd50c6be7917bb8ed8cb95364':
voc: Split ff_voc_get_packet into a separate file
Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
Diffstat (limited to 'libavformat/vocdec.c')
-rw-r--r-- | libavformat/vocdec.c | 119 |
1 files changed, 0 insertions, 119 deletions
diff --git a/libavformat/vocdec.c b/libavformat/vocdec.c index 70fa009814..0a11b97567 100644 --- a/libavformat/vocdec.c +++ b/libavformat/vocdec.c @@ -23,124 +23,6 @@ #include "voc.h" #include "internal.h" -int -ff_voc_get_packet(AVFormatContext *s, AVPacket *pkt, AVStream *st, int max_size) -{ - VocDecContext *voc = s->priv_data; - AVCodecContext *dec = st->codec; - AVIOContext *pb = s->pb; - VocType type; - int size, tmp_codec=-1; - int sample_rate = 0; - int channels = 1; - int64_t duration; - int ret; - - av_add_index_entry(st, - avio_tell(pb), - voc->pts, - voc->remaining_size, - 0, - AVINDEX_KEYFRAME); - - while (!voc->remaining_size) { - type = avio_r8(pb); - if (type == VOC_TYPE_EOF) - return AVERROR_EOF; - voc->remaining_size = avio_rl24(pb); - if (!voc->remaining_size) { - if (!s->pb->seekable) - return AVERROR(EIO); - voc->remaining_size = avio_size(pb) - avio_tell(pb); - } - max_size -= 4; - - switch (type) { - case VOC_TYPE_VOICE_DATA: - if (!dec->sample_rate) { - dec->sample_rate = 1000000 / (256 - avio_r8(pb)); - if (sample_rate) - dec->sample_rate = sample_rate; - avpriv_set_pts_info(st, 64, 1, dec->sample_rate); - dec->channels = channels; - dec->bits_per_coded_sample = av_get_bits_per_sample(dec->codec_id); - } else - avio_skip(pb, 1); - tmp_codec = avio_r8(pb); - voc->remaining_size -= 2; - max_size -= 2; - channels = 1; - break; - - case VOC_TYPE_VOICE_DATA_CONT: - break; - - case VOC_TYPE_EXTENDED: - sample_rate = avio_rl16(pb); - avio_r8(pb); - channels = avio_r8(pb) + 1; - sample_rate = 256000000 / (channels * (65536 - sample_rate)); - voc->remaining_size = 0; - max_size -= 4; - break; - - case VOC_TYPE_NEW_VOICE_DATA: - if (!dec->sample_rate) { - dec->sample_rate = avio_rl32(pb); - avpriv_set_pts_info(st, 64, 1, dec->sample_rate); - dec->bits_per_coded_sample = avio_r8(pb); - dec->channels = avio_r8(pb); - } else - avio_skip(pb, 6); - tmp_codec = avio_rl16(pb); - avio_skip(pb, 4); - voc->remaining_size -= 12; - max_size -= 12; - break; - - default: - avio_skip(pb, voc->remaining_size); - max_size -= voc->remaining_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 == AV_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 == AV_CODEC_ID_NONE) { - if (s->audio_codec_id == AV_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"); - } - } - - dec->bit_rate = dec->sample_rate * dec->channels * dec->bits_per_coded_sample; - - if (max_size <= 0) - max_size = 2048; - size = FFMIN(voc->remaining_size, max_size); - voc->remaining_size -= size; - - ret = av_get_packet(pb, pkt, size); - pkt->dts = pkt->pts = voc->pts; - - duration = av_get_audio_frame_duration(st->codec, size); - if (duration > 0 && voc->pts != AV_NOPTS_VALUE) - voc->pts += duration; - else - voc->pts = AV_NOPTS_VALUE; - - return ret; -} - -#if CONFIG_VOC_DEMUXER static int voc_probe(AVProbeData *p) { int version, check; @@ -215,4 +97,3 @@ AVInputFormat ff_voc_demuxer = { .read_seek = voc_read_seek, .codec_tag = (const AVCodecTag* const []){ ff_voc_codec_tags, 0 }, }; -#endif /* CONFIG_VOC_DEMUXER */ |