Mercurial > libavformat.hg
annotate mm.c @ 4040:b22f5462903e libavformat
Read optional components of the RDT packet header, such as extended setID
and streamID and the length. of the packet in case of packet concatenation.
Discussed in ML thread "[PATCH] RDT/Realmedia patches #2".
author | rbultje |
---|---|
date | Mon, 17 Nov 2008 14:32:01 +0000 |
parents | 457a89a670cf |
children | 7d2f3f1b68d8 |
rev | line source |
---|---|
950
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
1 /* |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
2 * American Laser Games MM Format Demuxer |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
3 * Copyright (c) 2006 Peter Ross |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
4 * |
1358
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1187
diff
changeset
|
5 * This file is part of FFmpeg. |
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1187
diff
changeset
|
6 * |
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1187
diff
changeset
|
7 * FFmpeg is free software; you can redistribute it and/or |
950
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
8 * modify it under the terms of the GNU Lesser General Public |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
9 * License as published by the Free Software Foundation; either |
1358
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1187
diff
changeset
|
10 * version 2.1 of the License, or (at your option) any later version. |
950
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
11 * |
1358
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1187
diff
changeset
|
12 * FFmpeg is distributed in the hope that it will be useful, |
950
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
15 * Lesser General Public License for more details. |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
16 * |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
17 * You should have received a copy of the GNU Lesser General Public |
1358
0899bfe4105c
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
1187
diff
changeset
|
18 * License along with FFmpeg; if not, write to the Free Software |
2217 | 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
950
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
20 */ |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
21 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
22 /** |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
23 * @file mm.c |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
24 * American Laser Games MM Format Demuxer |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
25 * by Peter Ross (suxen_drol at hotmail dot com) |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
26 * |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
27 * The MM format was used by IBM-PC ports of ALG's "arcade shooter" games, |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
28 * including Mad Dog McCree and Crime Patrol. |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
29 * |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
30 * Technical details here: |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
31 * http://wiki.multimedia.cx/index.php?title=American_Laser_Games_MM |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
32 */ |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
33 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
34 #include "avformat.h" |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
35 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
36 #define MM_PREAMBLE_SIZE 6 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
37 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
38 #define MM_TYPE_HEADER 0x0 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
39 #define MM_TYPE_INTER 0x5 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
40 #define MM_TYPE_INTRA 0x8 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
41 #define MM_TYPE_INTRA_HH 0xc |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
42 #define MM_TYPE_INTER_HH 0xd |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
43 #define MM_TYPE_INTRA_HHV 0xe |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
44 #define MM_TYPE_INTER_HHV 0xf |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
45 #define MM_TYPE_AUDIO 0x15 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
46 #define MM_TYPE_PALETTE 0x31 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
47 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
48 #define MM_HEADER_LEN_V 0x16 /* video only */ |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
49 #define MM_HEADER_LEN_AV 0x18 /* video + audio */ |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
50 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
51 #define MM_PALETTE_COUNT 128 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
52 #define MM_PALETTE_SIZE (MM_PALETTE_COUNT*3) |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
53 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
54 typedef struct { |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
55 unsigned int audio_pts, video_pts; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
56 } MmDemuxContext; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
57 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
58 static int mm_probe(AVProbeData *p) |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
59 { |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
60 /* the first chunk is always the header */ |
1673 | 61 if (AV_RL16(&p->buf[0]) != MM_TYPE_HEADER) |
950
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
62 return 0; |
1673 | 63 if (AV_RL32(&p->buf[2]) != MM_HEADER_LEN_V && AV_RL32(&p->buf[2]) != MM_HEADER_LEN_AV) |
950
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
64 return 0; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
65 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
66 /* only return half certainty since this check is a bit sketchy */ |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
67 return AVPROBE_SCORE_MAX / 2; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
68 } |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
69 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
70 static int mm_read_header(AVFormatContext *s, |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
71 AVFormatParameters *ap) |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
72 { |
2006 | 73 MmDemuxContext *mm = s->priv_data; |
2771
d52c718e83f9
Use dynamically allocated ByteIOContext in AVFormatContext
andoma
parents:
2274
diff
changeset
|
74 ByteIOContext *pb = s->pb; |
950
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
75 AVStream *st; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
76 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
77 unsigned int type, length; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
78 unsigned int frame_rate, width, height; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
79 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
80 type = get_le16(pb); |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
81 length = get_le32(pb); |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
82 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
83 if (type != MM_TYPE_HEADER) |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
84 return AVERROR_INVALIDDATA; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
85 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
86 /* read header */ |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
87 get_le16(pb); /* total number of chunks */ |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
88 frame_rate = get_le16(pb); |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
89 get_le16(pb); /* ibm-pc video bios mode */ |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
90 width = get_le16(pb); |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
91 height = get_le16(pb); |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
92 url_fseek(pb, length - 10, SEEK_CUR); /* unknown data */ |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
93 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
94 /* video stream */ |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
95 st = av_new_stream(s, 0); |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
96 if (!st) |
2273
7eb456c4ed8a
Replace all occurrences of AVERROR_NOMEM with AVERROR(ENOMEM).
takis
parents:
2217
diff
changeset
|
97 return AVERROR(ENOMEM); |
950
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
98 st->codec->codec_type = CODEC_TYPE_VIDEO; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
99 st->codec->codec_id = CODEC_ID_MMVIDEO; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
100 st->codec->codec_tag = 0; /* no fourcc */ |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
101 st->codec->width = width; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
102 st->codec->height = height; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
103 av_set_pts_info(st, 64, 1, frame_rate); |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
104 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
105 /* audio stream */ |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
106 if (length == MM_HEADER_LEN_AV) { |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
107 st = av_new_stream(s, 0); |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
108 if (!st) |
2273
7eb456c4ed8a
Replace all occurrences of AVERROR_NOMEM with AVERROR(ENOMEM).
takis
parents:
2217
diff
changeset
|
109 return AVERROR(ENOMEM); |
950
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
110 st->codec->codec_type = CODEC_TYPE_AUDIO; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
111 st->codec->codec_tag = 0; /* no fourcc */ |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
112 st->codec->codec_id = CODEC_ID_PCM_U8; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
113 st->codec->channels = 1; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
114 st->codec->sample_rate = 8000; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
115 av_set_pts_info(st, 64, 1, 8000); /* 8000 hz */ |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
116 } |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
117 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
118 mm->audio_pts = 0; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
119 mm->video_pts = 0; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
120 return 0; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
121 } |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
122 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
123 static int mm_read_packet(AVFormatContext *s, |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
124 AVPacket *pkt) |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
125 { |
2006 | 126 MmDemuxContext *mm = s->priv_data; |
2771
d52c718e83f9
Use dynamically allocated ByteIOContext in AVFormatContext
andoma
parents:
2274
diff
changeset
|
127 ByteIOContext *pb = s->pb; |
950
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
128 unsigned char preamble[MM_PREAMBLE_SIZE]; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
129 unsigned int type, length; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
130 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
131 while(1) { |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
132 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
133 if (get_buffer(pb, preamble, MM_PREAMBLE_SIZE) != MM_PREAMBLE_SIZE) { |
2274
b21c2af60bc9
Replace all occurrences of AVERROR_IO with AVERROR(EIO).
takis
parents:
2273
diff
changeset
|
134 return AVERROR(EIO); |
950
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
135 } |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
136 |
1673 | 137 type = AV_RL16(&preamble[0]); |
138 length = AV_RL16(&preamble[2]); | |
950
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
139 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
140 switch(type) { |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
141 case MM_TYPE_PALETTE : |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
142 case MM_TYPE_INTER : |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
143 case MM_TYPE_INTRA : |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
144 case MM_TYPE_INTRA_HH : |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
145 case MM_TYPE_INTER_HH : |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
146 case MM_TYPE_INTRA_HHV : |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
147 case MM_TYPE_INTER_HHV : |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
148 /* output preamble + data */ |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
149 if (av_new_packet(pkt, length + MM_PREAMBLE_SIZE)) |
2273
7eb456c4ed8a
Replace all occurrences of AVERROR_NOMEM with AVERROR(ENOMEM).
takis
parents:
2217
diff
changeset
|
150 return AVERROR(ENOMEM); |
950
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
151 memcpy(pkt->data, preamble, MM_PREAMBLE_SIZE); |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
152 if (get_buffer(pb, pkt->data + MM_PREAMBLE_SIZE, length) != length) |
2274
b21c2af60bc9
Replace all occurrences of AVERROR_IO with AVERROR(EIO).
takis
parents:
2273
diff
changeset
|
153 return AVERROR(EIO); |
950
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
154 pkt->size = length + MM_PREAMBLE_SIZE; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
155 pkt->stream_index = 0; |
3550 | 156 pkt->pts = mm->video_pts; |
157 if (type!=MM_TYPE_PALETTE) | |
158 mm->video_pts++; | |
950
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
159 return 0; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
160 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
161 case MM_TYPE_AUDIO : |
2771
d52c718e83f9
Use dynamically allocated ByteIOContext in AVFormatContext
andoma
parents:
2274
diff
changeset
|
162 if (av_get_packet(s->pb, pkt, length)<0) |
2273
7eb456c4ed8a
Replace all occurrences of AVERROR_NOMEM with AVERROR(ENOMEM).
takis
parents:
2217
diff
changeset
|
163 return AVERROR(ENOMEM); |
950
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
164 pkt->size = length; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
165 pkt->stream_index = 1; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
166 pkt->pts = mm->audio_pts++; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
167 return 0; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
168 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
169 default : |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
170 av_log(NULL, AV_LOG_INFO, "mm: unknown chunk type 0x%x\n", type); |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
171 url_fseek(pb, length, SEEK_CUR); |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
172 } |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
173 } |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
174 |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
175 return 0; |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
176 } |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
177 |
1169 | 178 AVInputFormat mm_demuxer = { |
950
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
179 "mm", |
3424
7a0230981402
Make long_names in lavf/lavdev optional depending on CONFIG_SMALL.
diego
parents:
2771
diff
changeset
|
180 NULL_IF_CONFIG_SMALL("American Laser Games MM format"), |
950
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
181 sizeof(MmDemuxContext), |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
182 mm_probe, |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
183 mm_read_header, |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
184 mm_read_packet, |
3a64595e57be
complete American Laser Games MM playback system, courtesy of Peter Ross
melanson
parents:
diff
changeset
|
185 }; |