annotate mm.c @ 3902:5f9bec099c69 libavformat

Add dynamic payload handlers to rdt.c. These follow the same API as the ones in rtpdec.c, so that they can be shared and used in the same way in rtsp.c. The handlers, since they are specific for RDT, are registered in rdt.c and a new registration function is thus called from allformats.c. The dynamic payload handler also implements RDT-specific SDP-line parsing for OpaqueData and StartTime, which are specific for RDT and needed for proper playback. OpaqueData contains one or a list ("MLTI") of "MDPR" chunks that can be parsed by the rmdec.c function ff_rm_read_mdpr_codecdata(). To use this function, we create a new rdt_demuxer, which has the same private data as the rm_demuxer. The resulting AVFormatContext created with _open_stream() can thus be used to call functions in the RM demuxer. See discussion in "Realmedia patch" thread on ML.
author rbultje
date Sun, 07 Sep 2008 01:21:24 +0000
parents 457a89a670cf
children 7d2f3f1b68d8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
06083249909c license header consistency cosmetics
diego
parents: 2006
diff changeset
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
a782462e2497 rename BE/LE_8/16/32 to AV_RL/B_8/16/32
alex
parents: 1358
diff changeset
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
a782462e2497 rename BE/LE_8/16/32 to AV_RL/B_8/16/32
alex
parents: 1358
diff changeset
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
2f0154760e5f Get rid of unnecessary pointer casts.
diego
parents: 2001
diff changeset
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
2f0154760e5f Get rid of unnecessary pointer casts.
diego
parents: 2001
diff changeset
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
a782462e2497 rename BE/LE_8/16/32 to AV_RL/B_8/16/32
alex
parents: 1358
diff changeset
137 type = AV_RL16(&preamble[0]);
a782462e2497 rename BE/LE_8/16/32 to AV_RL/B_8/16/32
alex
parents: 1358
diff changeset
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
db0c31111238 Remove AVPaletteControl from ALG MM demuxer/decoder
pross
parents: 3424
diff changeset
156 pkt->pts = mm->video_pts;
db0c31111238 Remove AVPaletteControl from ALG MM demuxer/decoder
pross
parents: 3424
diff changeset
157 if (type!=MM_TYPE_PALETTE)
db0c31111238 Remove AVPaletteControl from ALG MM demuxer/decoder
pross
parents: 3424
diff changeset
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
d18cc9a1fd02 allow individual selection of muxers and demuxers
mru
parents: 1167
diff changeset
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 };