Browse code

Merge commit '0d1229f1d2b8f26dd50c6be7917bb8ed8cb95364'

* commit '0d1229f1d2b8f26dd50c6be7917bb8ed8cb95364':
voc: Split ff_voc_get_packet into a separate file

Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>

Derek Buitenhuis authored on 2016/02/25 03:04:34
Showing 3 changed files
... ...
@@ -104,7 +104,7 @@ OBJS-$(CONFIG_AVI_MUXER)                 += avienc.o mpegtsenc.o avlanguage.o ra
104 104
 OBJS-$(CONFIG_AVISYNTH)                  += avisynth.o
105 105
 OBJS-$(CONFIG_AVM2_MUXER)                += swfenc.o swf.o
106 106
 OBJS-$(CONFIG_AVR_DEMUXER)               += avr.o pcm.o
107
-OBJS-$(CONFIG_AVS_DEMUXER)               += avs.o vocdec.o voc.o
107
+OBJS-$(CONFIG_AVS_DEMUXER)               += avs.o voc_packet.o vocdec.o voc.o
108 108
 OBJS-$(CONFIG_BETHSOFTVID_DEMUXER)       += bethsoftvid.o
109 109
 OBJS-$(CONFIG_BFI_DEMUXER)               += bfi.o
110 110
 OBJS-$(CONFIG_BINK_DEMUXER)              += bink.o
... ...
@@ -115,7 +115,7 @@ OBJS-$(CONFIG_BMV_DEMUXER)               += bmv.o
115 115
 OBJS-$(CONFIG_BOA_DEMUXER)               += boadec.o
116 116
 OBJS-$(CONFIG_BFSTM_DEMUXER)             += brstm.o
117 117
 OBJS-$(CONFIG_BRSTM_DEMUXER)             += brstm.o
118
-OBJS-$(CONFIG_C93_DEMUXER)               += c93.o vocdec.o voc.o
118
+OBJS-$(CONFIG_C93_DEMUXER)               += c93.o voc_packet.o vocdec.o voc.o
119 119
 OBJS-$(CONFIG_CAF_DEMUXER)               += cafdec.o caf.o mov.o mov_chan.o \
120 120
                                             replaygain.o
121 121
 OBJS-$(CONFIG_CAF_MUXER)                 += cafenc.o caf.o riff.o isom.o
... ...
@@ -463,7 +463,7 @@ OBJS-$(CONFIG_VC1T_MUXER)                += vc1testenc.o
463 463
 OBJS-$(CONFIG_VIVO_DEMUXER)              += vivo.o
464 464
 OBJS-$(CONFIG_VMD_DEMUXER)               += sierravmd.o
465 465
 OBJS-$(CONFIG_VOBSUB_DEMUXER)            += subtitles.o # mpeg demuxer is in the dependencies
466
-OBJS-$(CONFIG_VOC_DEMUXER)               += vocdec.o voc.o
466
+OBJS-$(CONFIG_VOC_DEMUXER)               += vocdec.o voc_packet.o voc.o
467 467
 OBJS-$(CONFIG_VOC_MUXER)                 += vocenc.o voc.o
468 468
 OBJS-$(CONFIG_VPK_DEMUXER)               += vpk.o
469 469
 OBJS-$(CONFIG_VPLAYER_DEMUXER)           += vplayerdec.o subtitles.o
470 470
new file mode 100644
... ...
@@ -0,0 +1,141 @@
0
+/*
1
+ * Copyright (c) 2006  Aurelien Jacobs <aurel@gnuage.org>
2
+ *
3
+ * This file is part of FFmpeg.
4
+ *
5
+ * FFmpeg is free software; you can redistribute it and/or
6
+ * modify it under the terms of the GNU Lesser General Public
7
+ * License as published by the Free Software Foundation; either
8
+ * version 2.1 of the License, or (at your option) any later version.
9
+ *
10
+ * FFmpeg is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13
+ * Lesser General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Lesser General Public
16
+ * License along with FFmpeg; if not, write to the Free Software
17
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+ */
19
+
20
+#include "libavutil/intreadwrite.h"
21
+#include "avformat.h"
22
+#include "internal.h"
23
+#include "voc.h"
24
+
25
+int
26
+ff_voc_get_packet(AVFormatContext *s, AVPacket *pkt, AVStream *st, int max_size)
27
+{
28
+    VocDecContext *voc = s->priv_data;
29
+    AVCodecContext *dec = st->codec;
30
+    AVIOContext *pb = s->pb;
31
+    VocType type;
32
+    int size, tmp_codec=-1;
33
+    int sample_rate = 0;
34
+    int channels = 1;
35
+    int64_t duration;
36
+    int ret;
37
+
38
+    av_add_index_entry(st,
39
+                       avio_tell(pb),
40
+                       voc->pts,
41
+                       voc->remaining_size,
42
+                       0,
43
+                       AVINDEX_KEYFRAME);
44
+
45
+    while (!voc->remaining_size) {
46
+        type = avio_r8(pb);
47
+        if (type == VOC_TYPE_EOF)
48
+            return AVERROR_EOF;
49
+        voc->remaining_size = avio_rl24(pb);
50
+        if (!voc->remaining_size) {
51
+            if (!s->pb->seekable)
52
+                return AVERROR(EIO);
53
+            voc->remaining_size = avio_size(pb) - avio_tell(pb);
54
+        }
55
+        max_size -= 4;
56
+
57
+        switch (type) {
58
+        case VOC_TYPE_VOICE_DATA:
59
+            if (!dec->sample_rate) {
60
+                dec->sample_rate = 1000000 / (256 - avio_r8(pb));
61
+                if (sample_rate)
62
+                    dec->sample_rate = sample_rate;
63
+                avpriv_set_pts_info(st, 64, 1, dec->sample_rate);
64
+                dec->channels = channels;
65
+                dec->bits_per_coded_sample = av_get_bits_per_sample(dec->codec_id);
66
+            } else
67
+                avio_skip(pb, 1);
68
+            tmp_codec = avio_r8(pb);
69
+            voc->remaining_size -= 2;
70
+            max_size -= 2;
71
+            channels = 1;
72
+            break;
73
+
74
+        case VOC_TYPE_VOICE_DATA_CONT:
75
+            break;
76
+
77
+        case VOC_TYPE_EXTENDED:
78
+            sample_rate = avio_rl16(pb);
79
+            avio_r8(pb);
80
+            channels = avio_r8(pb) + 1;
81
+            sample_rate = 256000000 / (channels * (65536 - sample_rate));
82
+            voc->remaining_size = 0;
83
+            max_size -= 4;
84
+            break;
85
+
86
+        case VOC_TYPE_NEW_VOICE_DATA:
87
+            if (!dec->sample_rate) {
88
+                dec->sample_rate = avio_rl32(pb);
89
+                avpriv_set_pts_info(st, 64, 1, dec->sample_rate);
90
+                dec->bits_per_coded_sample = avio_r8(pb);
91
+                dec->channels = avio_r8(pb);
92
+            } else
93
+                avio_skip(pb, 6);
94
+            tmp_codec = avio_rl16(pb);
95
+            avio_skip(pb, 4);
96
+            voc->remaining_size -= 12;
97
+            max_size -= 12;
98
+            break;
99
+
100
+        default:
101
+            avio_skip(pb, voc->remaining_size);
102
+            max_size -= voc->remaining_size;
103
+            voc->remaining_size = 0;
104
+            break;
105
+        }
106
+    }
107
+
108
+    if (tmp_codec >= 0) {
109
+        tmp_codec = ff_codec_get_id(ff_voc_codec_tags, tmp_codec);
110
+        if (dec->codec_id == AV_CODEC_ID_NONE)
111
+            dec->codec_id = tmp_codec;
112
+        else if (dec->codec_id != tmp_codec)
113
+            av_log(s, AV_LOG_WARNING, "Ignoring mid-stream change in audio codec\n");
114
+        if (dec->codec_id == AV_CODEC_ID_NONE) {
115
+            if (s->audio_codec_id == AV_CODEC_ID_NONE) {
116
+                av_log(s, AV_LOG_ERROR, "unknown codec tag\n");
117
+                return AVERROR(EINVAL);
118
+            }
119
+            av_log(s, AV_LOG_WARNING, "unknown codec tag\n");
120
+        }
121
+    }
122
+
123
+    dec->bit_rate = dec->sample_rate * dec->channels * dec->bits_per_coded_sample;
124
+
125
+    if (max_size <= 0)
126
+        max_size = 2048;
127
+    size = FFMIN(voc->remaining_size, max_size);
128
+    voc->remaining_size -= size;
129
+
130
+    ret = av_get_packet(pb, pkt, size);
131
+    pkt->dts = pkt->pts = voc->pts;
132
+
133
+    duration = av_get_audio_frame_duration(st->codec, size);
134
+    if (duration > 0 && voc->pts != AV_NOPTS_VALUE)
135
+        voc->pts += duration;
136
+    else
137
+        voc->pts = AV_NOPTS_VALUE;
138
+
139
+    return ret;
140
+}
... ...
@@ -23,124 +23,6 @@
23 23
 #include "voc.h"
24 24
 #include "internal.h"
25 25
 
26
-int
27
-ff_voc_get_packet(AVFormatContext *s, AVPacket *pkt, AVStream *st, int max_size)
28
-{
29
-    VocDecContext *voc = s->priv_data;
30
-    AVCodecContext *dec = st->codec;
31
-    AVIOContext *pb = s->pb;
32
-    VocType type;
33
-    int size, tmp_codec=-1;
34
-    int sample_rate = 0;
35
-    int channels = 1;
36
-    int64_t duration;
37
-    int ret;
38
-
39
-    av_add_index_entry(st,
40
-                       avio_tell(pb),
41
-                       voc->pts,
42
-                       voc->remaining_size,
43
-                       0,
44
-                       AVINDEX_KEYFRAME);
45
-
46
-    while (!voc->remaining_size) {
47
-        type = avio_r8(pb);
48
-        if (type == VOC_TYPE_EOF)
49
-            return AVERROR_EOF;
50
-        voc->remaining_size = avio_rl24(pb);
51
-        if (!voc->remaining_size) {
52
-            if (!s->pb->seekable)
53
-                return AVERROR(EIO);
54
-            voc->remaining_size = avio_size(pb) - avio_tell(pb);
55
-        }
56
-        max_size -= 4;
57
-
58
-        switch (type) {
59
-        case VOC_TYPE_VOICE_DATA:
60
-            if (!dec->sample_rate) {
61
-                dec->sample_rate = 1000000 / (256 - avio_r8(pb));
62
-                if (sample_rate)
63
-                    dec->sample_rate = sample_rate;
64
-                avpriv_set_pts_info(st, 64, 1, dec->sample_rate);
65
-                dec->channels = channels;
66
-                dec->bits_per_coded_sample = av_get_bits_per_sample(dec->codec_id);
67
-            } else
68
-                avio_skip(pb, 1);
69
-            tmp_codec = avio_r8(pb);
70
-            voc->remaining_size -= 2;
71
-            max_size -= 2;
72
-            channels = 1;
73
-            break;
74
-
75
-        case VOC_TYPE_VOICE_DATA_CONT:
76
-            break;
77
-
78
-        case VOC_TYPE_EXTENDED:
79
-            sample_rate = avio_rl16(pb);
80
-            avio_r8(pb);
81
-            channels = avio_r8(pb) + 1;
82
-            sample_rate = 256000000 / (channels * (65536 - sample_rate));
83
-            voc->remaining_size = 0;
84
-            max_size -= 4;
85
-            break;
86
-
87
-        case VOC_TYPE_NEW_VOICE_DATA:
88
-            if (!dec->sample_rate) {
89
-                dec->sample_rate = avio_rl32(pb);
90
-                avpriv_set_pts_info(st, 64, 1, dec->sample_rate);
91
-                dec->bits_per_coded_sample = avio_r8(pb);
92
-                dec->channels = avio_r8(pb);
93
-            } else
94
-                avio_skip(pb, 6);
95
-            tmp_codec = avio_rl16(pb);
96
-            avio_skip(pb, 4);
97
-            voc->remaining_size -= 12;
98
-            max_size -= 12;
99
-            break;
100
-
101
-        default:
102
-            avio_skip(pb, voc->remaining_size);
103
-            max_size -= voc->remaining_size;
104
-            voc->remaining_size = 0;
105
-            break;
106
-        }
107
-    }
108
-
109
-    if (tmp_codec >= 0) {
110
-        tmp_codec = ff_codec_get_id(ff_voc_codec_tags, tmp_codec);
111
-        if (dec->codec_id == AV_CODEC_ID_NONE)
112
-            dec->codec_id = tmp_codec;
113
-        else if (dec->codec_id != tmp_codec)
114
-            av_log(s, AV_LOG_WARNING, "Ignoring mid-stream change in audio codec\n");
115
-        if (dec->codec_id == AV_CODEC_ID_NONE) {
116
-            if (s->audio_codec_id == AV_CODEC_ID_NONE) {
117
-                av_log(s, AV_LOG_ERROR, "unknown codec tag\n");
118
-                return AVERROR(EINVAL);
119
-            }
120
-            av_log(s, AV_LOG_WARNING, "unknown codec tag\n");
121
-        }
122
-    }
123
-
124
-    dec->bit_rate = dec->sample_rate * dec->channels * dec->bits_per_coded_sample;
125
-
126
-    if (max_size <= 0)
127
-        max_size = 2048;
128
-    size = FFMIN(voc->remaining_size, max_size);
129
-    voc->remaining_size -= size;
130
-
131
-    ret = av_get_packet(pb, pkt, size);
132
-    pkt->dts = pkt->pts = voc->pts;
133
-
134
-    duration = av_get_audio_frame_duration(st->codec, size);
135
-    if (duration > 0 && voc->pts != AV_NOPTS_VALUE)
136
-        voc->pts += duration;
137
-    else
138
-        voc->pts = AV_NOPTS_VALUE;
139
-
140
-    return ret;
141
-}
142
-
143
-#if CONFIG_VOC_DEMUXER
144 26
 static int voc_probe(AVProbeData *p)
145 27
 {
146 28
     int version, check;
... ...
@@ -215,4 +97,3 @@ AVInputFormat ff_voc_demuxer = {
215 215
     .read_seek      = voc_read_seek,
216 216
     .codec_tag      = (const AVCodecTag* const []){ ff_voc_codec_tags, 0 },
217 217
 };
218
-#endif /* CONFIG_VOC_DEMUXER */