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

Side by Side Diff: patched-ffmpeg-mt/libavformat/avidec.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 * AVI demuxer 2 * AVI demuxer
3 * Copyright (c) 2001 Fabrice Bellard 3 * Copyright (c) 2001 Fabrice Bellard
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 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 AVIStream *ast; 125 AVIStream *ast;
126 int i; 126 int i;
127 int64_t last_pos= -1; 127 int64_t last_pos= -1;
128 int64_t filesize= url_fsize(s->pb); 128 int64_t filesize= url_fsize(s->pb);
129 129
130 #ifdef DEBUG_SEEK 130 #ifdef DEBUG_SEEK
131 av_log(s, AV_LOG_ERROR, "longs_pre_entry:%d index_type:%d entries_in_use:%d chunk_id:%X base:%16"PRIX64"\n", 131 av_log(s, AV_LOG_ERROR, "longs_pre_entry:%d index_type:%d entries_in_use:%d chunk_id:%X base:%16"PRIX64"\n",
132 longs_pre_entry,index_type, entries_in_use, chunk_id, base); 132 longs_pre_entry,index_type, entries_in_use, chunk_id, base);
133 #endif 133 #endif
134 134
135 if(stream_id > s->nb_streams || stream_id < 0) 135 if(stream_id >= s->nb_streams || stream_id < 0)
136 return -1; 136 return -1;
137 st= s->streams[stream_id]; 137 st= s->streams[stream_id];
138 ast = st->priv_data; 138 ast = st->priv_data;
139 139
140 if(index_sub_type) 140 if(index_sub_type)
141 return -1; 141 return -1;
142 142
143 get_le32(pb); 143 get_le32(pb);
144 144
145 if(index_type && longs_pre_entry != 2) 145 if(index_type && longs_pre_entry != 2)
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 pos= st->index_entries[0].pos; 220 pos= st->index_entries[0].pos;
221 size= st->index_entries[0].size; 221 size= st->index_entries[0].size;
222 ts= st->index_entries[0].timestamp; 222 ts= st->index_entries[0].timestamp;
223 223
224 for(j=0; j<size; j+=max){ 224 for(j=0; j<size; j+=max){
225 av_add_index_entry(st, pos+j, ts+j, FFMIN(max, size-j), 0, AVINDEX_K EYFRAME); 225 av_add_index_entry(st, pos+j, ts+j, FFMIN(max, size-j), 0, AVINDEX_K EYFRAME);
226 } 226 }
227 } 227 }
228 } 228 }
229 229
230 static int avi_read_tag(AVFormatContext *s, const char *key, unsigned int size) 230 static int avi_read_tag(AVFormatContext *s, AVStream *st, uint32_t tag, uint32_t size)
231 { 231 {
232 ByteIOContext *pb = s->pb; 232 ByteIOContext *pb = s->pb;
233 char *value; 233 char key[5] = {0}, *value;
234 234
235 size += (size & 1); 235 size += (size & 1);
236 236
237 if (size == UINT_MAX) 237 if (size == UINT_MAX)
238 return -1; 238 return -1;
239 value = av_malloc(size+1); 239 value = av_malloc(size+1);
240 if (!value) 240 if (!value)
241 return -1; 241 return -1;
242 get_strz(pb, value, size); 242 get_buffer(pb, value, size);
243 value[size]=0;
243 244
245 AV_WL32(key, tag);
246
247 if(st)
248 return av_metadata_set2(&st->metadata, key, value,
249 AV_METADATA_DONT_STRDUP_VAL);
250 else
244 return av_metadata_set2(&s->metadata, key, value, 251 return av_metadata_set2(&s->metadata, key, value,
245 AV_METADATA_DONT_STRDUP_VAL); 252 AV_METADATA_DONT_STRDUP_VAL);
246 } 253 }
247 254
255 static void avi_read_info(AVFormatContext *s, uint64_t end)
256 {
257 while (url_ftell(s->pb) < end) {
258 uint32_t tag = get_le32(s->pb);
259 uint32_t size = get_le32(s->pb);
260 avi_read_tag(s, NULL, tag, size);
261 }
262 }
263
248 static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) 264 static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
249 { 265 {
250 AVIContext *avi = s->priv_data; 266 AVIContext *avi = s->priv_data;
251 ByteIOContext *pb = s->pb; 267 ByteIOContext *pb = s->pb;
252 unsigned int tag, tag1, handler; 268 unsigned int tag, tag1, handler;
253 int codec_type, stream_index, frame_period, bit_rate; 269 int codec_type, stream_index, frame_period, bit_rate;
254 unsigned int size; 270 unsigned int size;
255 int i; 271 int i;
256 AVStream *st; 272 AVStream *st;
257 AVIStream *ast = NULL; 273 AVIStream *ast = NULL;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 #ifdef DEBUG 305 #ifdef DEBUG
290 print_tag("list", tag1, 0); 306 print_tag("list", tag1, 0);
291 #endif 307 #endif
292 if (tag1 == MKTAG('m', 'o', 'v', 'i')) { 308 if (tag1 == MKTAG('m', 'o', 'v', 'i')) {
293 avi->movi_list = url_ftell(pb) - 4; 309 avi->movi_list = url_ftell(pb) - 4;
294 if(size) avi->movi_end = avi->movi_list + size + (size & 1); 310 if(size) avi->movi_end = avi->movi_list + size + (size & 1);
295 else avi->movi_end = url_fsize(pb); 311 else avi->movi_end = url_fsize(pb);
296 dprintf(NULL, "movi end=%"PRIx64"\n", avi->movi_end); 312 dprintf(NULL, "movi end=%"PRIx64"\n", avi->movi_end);
297 goto end_of_header; 313 goto end_of_header;
298 } 314 }
315 else if (tag1 == MKTAG('I', 'N', 'F', 'O'))
316 avi_read_info(s, list_end);
317
299 break; 318 break;
300 case MKTAG('d', 'm', 'l', 'h'): 319 case MKTAG('d', 'm', 'l', 'h'):
301 avi->is_odml = 1; 320 avi->is_odml = 1;
302 url_fskip(pb, size + (size & 1)); 321 url_fskip(pb, size + (size & 1));
303 break; 322 break;
304 case MKTAG('a', 'm', 'v', 'h'): 323 case MKTAG('a', 'm', 'v', 'h'):
305 amv_file_format=1; 324 amv_file_format=1;
306 case MKTAG('a', 'v', 'i', 'h'): 325 case MKTAG('a', 'v', 'i', 'h'):
307 /* AVI header */ 326 /* AVI header */
308 /* using frame_period is bad idea */ 327 /* using frame_period is bad idea */
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 get_le32(pb); //nbFieldsPerFrame 613 get_le32(pb); //nbFieldsPerFrame
595 614
596 if(active_aspect.num && active_aspect.den && active.num && activ e.den){ 615 if(active_aspect.num && active_aspect.den && active.num && activ e.den){
597 st->sample_aspect_ratio= av_div_q(active_aspect, active); 616 st->sample_aspect_ratio= av_div_q(active_aspect, active);
598 //av_log(s, AV_LOG_ERROR, "vprp %d/%d %d/%d\n", active_aspect.num, active_aspect .den, active.num, active.den); 617 //av_log(s, AV_LOG_ERROR, "vprp %d/%d %d/%d\n", active_aspect.num, active_aspect .den, active.num, active.den);
599 } 618 }
600 size -= 9*4; 619 size -= 9*4;
601 } 620 }
602 url_fseek(pb, size, SEEK_CUR); 621 url_fseek(pb, size, SEEK_CUR);
603 break; 622 break;
604 case MKTAG('I', 'N', 'A', 'M'): 623 case MKTAG('s', 't', 'r', 'n'):
605 avi_read_tag(s, "Title", size); 624 if(s->nb_streams){
606 break; 625 avi_read_tag(s, s->streams[s->nb_streams-1], tag, size);
607 case MKTAG('I', 'A', 'R', 'T'): 626 break;
608 avi_read_tag(s, "Artist", size); 627 }
609 break;
610 case MKTAG('I', 'C', 'O', 'P'):
611 avi_read_tag(s, "Copyright", size);
612 break;
613 case MKTAG('I', 'C', 'M', 'T'):
614 avi_read_tag(s, "Comment", size);
615 break;
616 case MKTAG('I', 'G', 'N', 'R'):
617 avi_read_tag(s, "Genre", size);
618 break;
619 case MKTAG('I', 'P', 'R', 'D'):
620 avi_read_tag(s, "Album", size);
621 break;
622 case MKTAG('I', 'P', 'R', 'T'):
623 avi_read_tag(s, "Track", size);
624 break;
625 default: 628 default:
626 if(size > 1000000){ 629 if(size > 1000000){
627 av_log(s, AV_LOG_ERROR, "Something went wrong during header pars ing, " 630 av_log(s, AV_LOG_ERROR, "Something went wrong during header pars ing, "
628 "I will ignore it and try to continue an yway.\n"); 631 "I will ignore it and try to continue an yway.\n");
629 avi->movi_list = url_ftell(pb) - 4; 632 avi->movi_list = url_ftell(pb) - 4;
630 avi->movi_end = url_fsize(pb); 633 avi->movi_end = url_fsize(pb);
631 goto end_of_header; 634 goto end_of_header;
632 } 635 }
633 /* skip tag */ 636 /* skip tag */
634 size += (size & 1); 637 size += (size & 1);
(...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after
1173 1176
1174 AVInputFormat avi_demuxer = { 1177 AVInputFormat avi_demuxer = {
1175 "avi", 1178 "avi",
1176 NULL_IF_CONFIG_SMALL("AVI format"), 1179 NULL_IF_CONFIG_SMALL("AVI format"),
1177 sizeof(AVIContext), 1180 sizeof(AVIContext),
1178 avi_probe, 1181 avi_probe,
1179 avi_read_header, 1182 avi_read_header,
1180 avi_read_packet, 1183 avi_read_packet,
1181 avi_read_close, 1184 avi_read_close,
1182 avi_read_seek, 1185 avi_read_seek,
1186 .metadata_conv = ff_avi_metadata_conv,
1183 }; 1187 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698