40
40
#define MM_PREAMBLE_SIZE 6
41
41
42
42
#define MM_TYPE_HEADER 0x0
43
+ #define MM_TYPE_RAW 0x2
43
44
#define MM_TYPE_INTER 0x5
44
45
#define MM_TYPE_INTRA 0x8
45
46
#define MM_TYPE_INTRA_HH 0xc
46
47
#define MM_TYPE_INTER_HH 0xd
47
48
#define MM_TYPE_INTRA_HHV 0xe
48
49
#define MM_TYPE_INTER_HHV 0xf
50
+ #define MM_TYPE_AUDIO2 0x14
49
51
#define MM_TYPE_AUDIO 0x15
50
52
#define MM_TYPE_PALETTE 0x31
51
53
52
54
#define MM_HEADER_LEN_V 0x16 /* video only */
53
55
#define MM_HEADER_LEN_AV 0x18 /* video + audio */
56
+ #define MM_HEADER_LEN_AV2 0x1a
54
57
55
58
#define MM_PALETTE_COUNT 128
56
59
#define MM_PALETTE_SIZE (MM_PALETTE_COUNT*3)
@@ -68,7 +71,7 @@ static int probe(const AVProbeData *p)
68
71
if (AV_RL16 (& p -> buf [0 ]) != MM_TYPE_HEADER )
69
72
return 0 ;
70
73
len = AV_RL32 (& p -> buf [2 ]);
71
- if (len != MM_HEADER_LEN_V && len != MM_HEADER_LEN_AV )
74
+ if (len != MM_HEADER_LEN_V && len != MM_HEADER_LEN_AV && len != MM_HEADER_LEN_AV2 )
72
75
return 0 ;
73
76
fps = AV_RL16 (& p -> buf [8 ]);
74
77
w = AV_RL16 (& p -> buf [12 ]);
@@ -118,7 +121,7 @@ static int read_header(AVFormatContext *s)
118
121
avpriv_set_pts_info (st , 64 , 1 , frame_rate );
119
122
120
123
/* audio stream */
121
- if (length = = MM_HEADER_LEN_AV ) {
124
+ if (length > = MM_HEADER_LEN_AV ) {
122
125
st = avformat_new_stream (s , NULL );
123
126
if (!st )
124
127
return AVERROR (ENOMEM );
@@ -154,6 +157,7 @@ static int read_packet(AVFormatContext *s,
154
157
length = AV_RL16 (& preamble [2 ]);
155
158
156
159
switch (type ) {
160
+ case MM_TYPE_RAW :
157
161
case MM_TYPE_PALETTE :
158
162
case MM_TYPE_INTER :
159
163
case MM_TYPE_INTRA :
@@ -186,6 +190,7 @@ static int read_packet(AVFormatContext *s,
186
190
187
191
default :
188
192
av_log (s , AV_LOG_INFO , "unknown chunk type 0x%x\n" , type );
193
+ case MM_TYPE_AUDIO2 :
189
194
avio_skip (pb , length );
190
195
}
191
196
}
0 commit comments