Browse code

Move channel chunk reading function to isom.c.

Move ff_read_chan_chunk() to isom.c and rename it as ff_mov_read_chan().

Carl Eugen Hoyos authored on 2011/04/28 17:45:32
Showing 7 changed files
... ...
@@ -23,7 +23,7 @@ OBJS-$(CONFIG_AC3_DEMUXER)               += ac3dec.o rawdec.o
23 23
 OBJS-$(CONFIG_AC3_MUXER)                 += rawenc.o
24 24
 OBJS-$(CONFIG_ADTS_MUXER)                += adtsenc.o
25 25
 OBJS-$(CONFIG_AEA_DEMUXER)               += aea.o pcm.o
26
-OBJS-$(CONFIG_AIFF_DEMUXER)              += aiffdec.o riff.o pcm.o caf.o
26
+OBJS-$(CONFIG_AIFF_DEMUXER)              += aiffdec.o riff.o pcm.o isom.o
27 27
 OBJS-$(CONFIG_AIFF_MUXER)                += aiffenc.o riff.o
28 28
 OBJS-$(CONFIG_AMR_DEMUXER)               += amr.o
29 29
 OBJS-$(CONFIG_AMR_MUXER)                 += amr.o
... ...
@@ -23,7 +23,7 @@
23 23
 #include "avformat.h"
24 24
 #include "pcm.h"
25 25
 #include "aiff.h"
26
-#include "caf.h"
26
+#include "isom.h"
27 27
 
28 28
 #define AIFF                    0
29 29
 #define AIFF_C_VERSION1         0xA2805140
... ...
@@ -257,7 +257,7 @@ static int aiff_read_header(AVFormatContext *s,
257 257
         case MKTAG('C','H','A','N'):
258 258
             if (size < 12)
259 259
                 return AVERROR_INVALIDDATA;
260
-            ff_read_chan_chunk(s, size, st->codec);
260
+            ff_mov_read_chan(s, size, st->codec);
261 261
             break;
262 262
         default: /* Jump */
263 263
             if (size & 1)   /* Always even aligned */
... ...
@@ -57,62 +57,3 @@ const AVCodecTag ff_codec_caf_tags[] = {
57 57
     { CODEC_ID_NONE,            0 },
58 58
 };
59 59
 
60
-typedef struct CafChannelLayout {
61
-    int64_t  channel_layout;
62
-    uint32_t layout_tag;
63
-} CafChannelLayout;
64
-
65
-static const CafChannelLayout caf_channel_layout[] = {
66
-    { AV_CH_LAYOUT_MONO,                         (100<<16) | 1}, //< kCAFChannelLayoutTag_Mono
67
-    { AV_CH_LAYOUT_STEREO,                       (101<<16) | 2}, //< kCAFChannelLayoutTag_Stereo
68
-    { AV_CH_LAYOUT_STEREO,                       (102<<16) | 2}, //< kCAFChannelLayoutTag_StereoHeadphones
69
-    { AV_CH_LAYOUT_2_1,                          (131<<16) | 3}, //< kCAFChannelLayoutTag_ITU_2_1
70
-    { AV_CH_LAYOUT_QUAD,                         (132<<16) | 4}, //< kCAFChannelLayoutTag_ITU_2_2
71
-    { AV_CH_LAYOUT_2_2,                          (132<<16) | 4}, //< kCAFChannelLayoutTag_ITU_2_2
72
-    { AV_CH_LAYOUT_QUAD,                         (108<<16) | 4}, //< kCAFChannelLayoutTag_Quadraphonic
73
-    { AV_CH_LAYOUT_SURROUND,                     (113<<16) | 3}, //< kCAFChannelLayoutTag_MPEG_3_0_A
74
-    { AV_CH_LAYOUT_4POINT0,                      (115<<16) | 4}, //< kCAFChannelLayoutTag_MPEG_4_0_A
75
-    { AV_CH_LAYOUT_5POINT0_BACK,                 (117<<16) | 5}, //< kCAFChannelLayoutTag_MPEG_5_0_A
76
-    { AV_CH_LAYOUT_5POINT0,                      (117<<16) | 5}, //< kCAFChannelLayoutTag_MPEG_5_0_A
77
-    { AV_CH_LAYOUT_5POINT1_BACK,                 (121<<16) | 6}, //< kCAFChannelLayoutTag_MPEG_5_1_A
78
-    { AV_CH_LAYOUT_5POINT1,                      (121<<16) | 6}, //< kCAFChannelLayoutTag_MPEG_5_1_A
79
-    { AV_CH_LAYOUT_7POINT1,                      (128<<16) | 8}, //< kCAFChannelLayoutTag_MPEG_7_1_C
80
-    { AV_CH_LAYOUT_7POINT1_WIDE,                 (126<<16) | 8}, //< kCAFChannelLayoutTag_MPEG_7_1_A
81
-    { AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY,   (133<<16) | 3}, //< kCAFChannelLayoutTag_DVD_4
82
-    { AV_CH_LAYOUT_2_1|AV_CH_LOW_FREQUENCY,      (134<<16) | 4}, //< kCAFChannelLayoutTag_DVD_5
83
-    { AV_CH_LAYOUT_QUAD|AV_CH_LOW_FREQUENCY,     (135<<16) | 4}, //< kCAFChannelLayoutTag_DVD_6
84
-    { AV_CH_LAYOUT_2_2|AV_CH_LOW_FREQUENCY,      (135<<16) | 4}, //< kCAFChannelLayoutTag_DVD_6
85
-    { AV_CH_LAYOUT_SURROUND|AV_CH_LOW_FREQUENCY, (136<<16) | 4}, //< kCAFChannelLayoutTag_DVD_10
86
-    { AV_CH_LAYOUT_4POINT0|AV_CH_LOW_FREQUENCY,  (137<<16) | 5}, //< kCAFChannelLayoutTag_DVD_11
87
-    { 0, 0},
88
-};
89
-
90
-void ff_read_chan_chunk(AVFormatContext *s, int64_t size, AVCodecContext *codec)
91
-{
92
-    uint32_t layout_tag;
93
-    AVIOContext *pb = s->pb;
94
-    const CafChannelLayout *caf_layout = caf_channel_layout;
95
-    if (size != 12) {
96
-        // Channel descriptions not implemented
97
-        av_log_ask_for_sample(s, "Unimplemented channel layout.\n");
98
-        avio_skip(pb, size);
99
-        return;
100
-    }
101
-    layout_tag = avio_rb32(pb);
102
-    if (layout_tag == 0x10000) { //< kCAFChannelLayoutTag_UseChannelBitmap
103
-        codec->channel_layout = avio_rb32(pb);
104
-        avio_skip(pb, 4);
105
-        return;
106
-    }
107
-    while (caf_layout->channel_layout) {
108
-        if (layout_tag == caf_layout->layout_tag) {
109
-            codec->channel_layout = caf_layout->channel_layout;
110
-            break;
111
-        }
112
-        caf_layout++;
113
-    }
114
-    if (!codec->channel_layout)
115
-        av_log(s, AV_LOG_WARNING, "Unknown channel layout.\n");
116
-    avio_skip(pb, 8);
117
-}
118
-
... ...
@@ -27,11 +27,8 @@
27 27
 #ifndef AVFORMAT_CAF_H
28 28
 #define AVFORMAT_CAF_H
29 29
 
30
-#include "avformat.h"
31 30
 #include "internal.h"
32 31
 
33 32
 extern const AVCodecTag ff_codec_caf_tags[];
34 33
 
35
-void ff_read_chan_chunk(AVFormatContext *s, int64_t size, AVCodecContext *codec);
36
-
37 34
 #endif /* AVFORMAT_CAF_H */
... ...
@@ -260,7 +260,7 @@ static int read_header(AVFormatContext *s,
260 260
         case MKBETAG('c','h','a','n'):
261 261
             if (size < 12)
262 262
                 return AVERROR_INVALIDDATA;
263
-            ff_read_chan_chunk(s, size, st->codec);
263
+            ff_mov_read_chan(s, size, st->codec);
264 264
             break;
265 265
 
266 266
         default:
... ...
@@ -420,3 +420,63 @@ int ff_mp4_read_dec_config_descr(AVFormatContext *fc, AVStream *st, AVIOContext
420 420
     }
421 421
     return 0;
422 422
 }
423
+
424
+typedef struct MovChannelLayout {
425
+    int64_t  channel_layout;
426
+    uint32_t layout_tag;
427
+} MovChannelLayout;
428
+
429
+static const MovChannelLayout mov_channel_layout[] = {
430
+    { AV_CH_LAYOUT_MONO,                         (100<<16) | 1}, //< kCAFChannelLayoutTag_Mono
431
+    { AV_CH_LAYOUT_STEREO,                       (101<<16) | 2}, //< kCAFChannelLayoutTag_Stereo
432
+    { AV_CH_LAYOUT_STEREO,                       (102<<16) | 2}, //< kCAFChannelLayoutTag_StereoHeadphones
433
+    { AV_CH_LAYOUT_2_1,                          (131<<16) | 3}, //< kCAFChannelLayoutTag_ITU_2_1
434
+    { AV_CH_LAYOUT_QUAD,                         (132<<16) | 4}, //< kCAFChannelLayoutTag_ITU_2_2
435
+    { AV_CH_LAYOUT_2_2,                          (132<<16) | 4}, //< kCAFChannelLayoutTag_ITU_2_2
436
+    { AV_CH_LAYOUT_QUAD,                         (108<<16) | 4}, //< kCAFChannelLayoutTag_Quadraphonic
437
+    { AV_CH_LAYOUT_SURROUND,                     (113<<16) | 3}, //< kCAFChannelLayoutTag_MPEG_3_0_A
438
+    { AV_CH_LAYOUT_4POINT0,                      (115<<16) | 4}, //< kCAFChannelLayoutTag_MPEG_4_0_A
439
+    { AV_CH_LAYOUT_5POINT0_BACK,                 (117<<16) | 5}, //< kCAFChannelLayoutTag_MPEG_5_0_A
440
+    { AV_CH_LAYOUT_5POINT0,                      (117<<16) | 5}, //< kCAFChannelLayoutTag_MPEG_5_0_A
441
+    { AV_CH_LAYOUT_5POINT1_BACK,                 (121<<16) | 6}, //< kCAFChannelLayoutTag_MPEG_5_1_A
442
+    { AV_CH_LAYOUT_5POINT1,                      (121<<16) | 6}, //< kCAFChannelLayoutTag_MPEG_5_1_A
443
+    { AV_CH_LAYOUT_7POINT1,                      (128<<16) | 8}, //< kCAFChannelLayoutTag_MPEG_7_1_C
444
+    { AV_CH_LAYOUT_7POINT1_WIDE,                 (126<<16) | 8}, //< kCAFChannelLayoutTag_MPEG_7_1_A
445
+    { AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY,   (133<<16) | 3}, //< kCAFChannelLayoutTag_DVD_4
446
+    { AV_CH_LAYOUT_2_1|AV_CH_LOW_FREQUENCY,      (134<<16) | 4}, //< kCAFChannelLayoutTag_DVD_5
447
+    { AV_CH_LAYOUT_QUAD|AV_CH_LOW_FREQUENCY,     (135<<16) | 4}, //< kCAFChannelLayoutTag_DVD_6
448
+    { AV_CH_LAYOUT_2_2|AV_CH_LOW_FREQUENCY,      (135<<16) | 4}, //< kCAFChannelLayoutTag_DVD_6
449
+    { AV_CH_LAYOUT_SURROUND|AV_CH_LOW_FREQUENCY, (136<<16) | 4}, //< kCAFChannelLayoutTag_DVD_10
450
+    { AV_CH_LAYOUT_4POINT0|AV_CH_LOW_FREQUENCY,  (137<<16) | 5}, //< kCAFChannelLayoutTag_DVD_11
451
+    { 0, 0},
452
+};
453
+
454
+void ff_mov_read_chan(AVFormatContext *s, int64_t size, AVCodecContext *codec)
455
+{
456
+    uint32_t layout_tag;
457
+    AVIOContext *pb = s->pb;
458
+    const MovChannelLayout *layouts = mov_channel_layout;
459
+    if (size != 12) {
460
+        // Channel descriptions not implemented
461
+        av_log_ask_for_sample(s, "Unimplemented channel layout.\n");
462
+        avio_skip(pb, size);
463
+        return;
464
+    }
465
+    layout_tag = avio_rb32(pb);
466
+    if (layout_tag == 0x10000) { //< kCAFChannelLayoutTag_UseChannelBitmap
467
+        codec->channel_layout = avio_rb32(pb);
468
+        avio_skip(pb, 4);
469
+        return;
470
+    }
471
+    while (layouts->channel_layout) {
472
+        if (layout_tag == layouts->layout_tag) {
473
+            codec->channel_layout = layouts->channel_layout;
474
+            break;
475
+        }
476
+        layouts++;
477
+    }
478
+    if (!codec->channel_layout)
479
+        av_log(s, AV_LOG_WARNING, "Unknown channel layout.\n");
480
+    avio_skip(pb, 8);
481
+}
482
+
... ...
@@ -156,5 +156,6 @@ int ff_mov_read_esds(AVFormatContext *fc, AVIOContext *pb, MOVAtom atom);
156 156
 enum CodecID ff_mov_get_lpcm_codec_id(int bps, int flags);
157 157
 
158 158
 int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries);
159
+void ff_mov_read_chan(AVFormatContext *s, int64_t size, AVCodecContext *codec);
159 160
 
160 161
 #endif /* AVFORMAT_ISOM_H */