Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(68)

Side by Side Diff: patched-ffmpeg-mt/libavformat/dsicin.c

Issue 789004: ffmpeg roll of source to mar 9 version... (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/ffmpeg/
Patch Set: '' Created 10 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Delphine Software International CIN File Demuxer 2 * Delphine Software International CIN File Demuxer
3 * Copyright (c) 2006 Gregory Montoir (cyx@users.sourceforge.net) 3 * Copyright (c) 2006 Gregory Montoir (cyx@users.sourceforge.net)
4 * 4 *
5 * This file is part of FFmpeg. 5 * This file is part of FFmpeg.
6 * 6 *
7 * FFmpeg is free software; you can redistribute it and/or 7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public 8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version. 10 * version 2.1 of the License, or (at your option) any later version.
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 155
156 return 0; 156 return 0;
157 } 157 }
158 158
159 static int cin_read_packet(AVFormatContext *s, AVPacket *pkt) 159 static int cin_read_packet(AVFormatContext *s, AVPacket *pkt)
160 { 160 {
161 CinDemuxContext *cin = s->priv_data; 161 CinDemuxContext *cin = s->priv_data;
162 ByteIOContext *pb = s->pb; 162 ByteIOContext *pb = s->pb;
163 CinFrameHeader *hdr = &cin->frame_header; 163 CinFrameHeader *hdr = &cin->frame_header;
164 int rc, palette_type, pkt_size; 164 int rc, palette_type, pkt_size;
165 int ret;
165 166
166 if (cin->audio_buffer_size == 0) { 167 if (cin->audio_buffer_size == 0) {
167 rc = cin_read_frame_header(cin, pb); 168 rc = cin_read_frame_header(cin, pb);
168 if (rc) 169 if (rc)
169 return rc; 170 return rc;
170 171
171 if ((int16_t)hdr->pal_colors_count < 0) { 172 if ((int16_t)hdr->pal_colors_count < 0) {
172 hdr->pal_colors_count = -(int16_t)hdr->pal_colors_count; 173 hdr->pal_colors_count = -(int16_t)hdr->pal_colors_count;
173 palette_type = 1; 174 palette_type = 1;
174 } else { 175 } else {
175 palette_type = 0; 176 palette_type = 0;
176 } 177 }
177 178
178 /* palette and video packet */ 179 /* palette and video packet */
179 pkt_size = (palette_type + 3) * hdr->pal_colors_count + hdr->video_frame _size; 180 pkt_size = (palette_type + 3) * hdr->pal_colors_count + hdr->video_frame _size;
180 181
181 if (av_new_packet(pkt, 4 + pkt_size)) 182 ret = av_new_packet(pkt, 4 + pkt_size);
182 return AVERROR(ENOMEM); 183 if (ret < 0)
184 return ret;
183 185
184 pkt->stream_index = cin->video_stream_index; 186 pkt->stream_index = cin->video_stream_index;
185 pkt->pts = cin->video_stream_pts++; 187 pkt->pts = cin->video_stream_pts++;
186 188
187 pkt->data[0] = palette_type; 189 pkt->data[0] = palette_type;
188 pkt->data[1] = hdr->pal_colors_count & 0xFF; 190 pkt->data[1] = hdr->pal_colors_count & 0xFF;
189 pkt->data[2] = hdr->pal_colors_count >> 8; 191 pkt->data[2] = hdr->pal_colors_count >> 8;
190 pkt->data[3] = hdr->video_frame_type; 192 pkt->data[3] = hdr->video_frame_type;
191 193
192 if (get_buffer(pb, &pkt->data[4], pkt_size) != pkt_size) 194 ret = get_buffer(pb, &pkt->data[4], pkt_size);
193 return AVERROR(EIO); 195 if (ret < 0) {
196 av_free_packet(pkt);
197 return ret;
198 }
199 if (ret < pkt_size)
200 av_shrink_packet(pkt, 4 + ret);
194 201
195 /* sound buffer will be processed on next read_packet() call */ 202 /* sound buffer will be processed on next read_packet() call */
196 cin->audio_buffer_size = hdr->audio_frame_size; 203 cin->audio_buffer_size = hdr->audio_frame_size;
197 return 0; 204 return 0;
198 } 205 }
199 206
200 /* audio packet */ 207 /* audio packet */
201 if (av_new_packet(pkt, cin->audio_buffer_size)) 208 ret = av_get_packet(pb, pkt, cin->audio_buffer_size);
202 return AVERROR(ENOMEM); 209 if (ret < 0)
210 return ret;
203 211
204 pkt->stream_index = cin->audio_stream_index; 212 pkt->stream_index = cin->audio_stream_index;
205 pkt->pts = cin->audio_stream_pts; 213 pkt->pts = cin->audio_stream_pts;
206 cin->audio_stream_pts += cin->audio_buffer_size * 2 / cin->file_header.audio _frame_size; 214 cin->audio_stream_pts += cin->audio_buffer_size * 2 / cin->file_header.audio _frame_size;
207
208 if (get_buffer(pb, pkt->data, cin->audio_buffer_size) != cin->audio_buffer_s ize)
209 return AVERROR(EIO);
210
211 cin->audio_buffer_size = 0; 215 cin->audio_buffer_size = 0;
212 return 0; 216 return 0;
213 } 217 }
214 218
215 AVInputFormat dsicin_demuxer = { 219 AVInputFormat dsicin_demuxer = {
216 "dsicin", 220 "dsicin",
217 NULL_IF_CONFIG_SMALL("Delphine Software International CIN format"), 221 NULL_IF_CONFIG_SMALL("Delphine Software International CIN format"),
218 sizeof(CinDemuxContext), 222 sizeof(CinDemuxContext),
219 cin_probe, 223 cin_probe,
220 cin_read_header, 224 cin_read_header,
221 cin_read_packet, 225 cin_read_packet,
222 }; 226 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698