comparison raw.c @ 6435:67433b0c29d5 libavformat

move h264 demuxer to its own file
author aurel
date Sun, 29 Aug 2010 21:28:51 +0000
parents 7c98c16c97c5
children 505105fc99ab
comparison
equal deleted inserted replaced
6434:ca5676c4563d 6435:67433b0c29d5
239 239
240 return 0; 240 return 0;
241 } 241 }
242 #endif 242 #endif
243 243
244 #if CONFIG_H264_DEMUXER
245 static int h264_probe(AVProbeData *p)
246 {
247 uint32_t code= -1;
248 int sps=0, pps=0, idr=0, res=0, sli=0;
249 int i;
250
251 for(i=0; i<p->buf_size; i++){
252 code = (code<<8) + p->buf[i];
253 if ((code & 0xffffff00) == 0x100) {
254 int ref_idc= (code>>5)&3;
255 int type = code & 0x1F;
256 static const int8_t ref_zero[32]={
257 2, 0, 0, 0, 0,-1, 1,-1,
258 -1, 1, 1, 1, 1,-1, 2, 2,
259 2, 2, 2, 0, 2, 2, 2, 2,
260 2, 2, 2, 2, 2, 2, 2, 2
261 };
262
263 if(code & 0x80) //forbidden bit
264 return 0;
265
266 if(ref_zero[type] == 1 && ref_idc)
267 return 0;
268 if(ref_zero[type] ==-1 && !ref_idc)
269 return 0;
270 if(ref_zero[type] == 2)
271 res++;
272
273 switch(type){
274 case 1: sli++; break;
275 case 5: idr++; break;
276 case 7:
277 if(p->buf[i+2]&0x0F)
278 return 0;
279 sps++;
280 break;
281 case 8: pps++; break;
282 }
283 }
284 }
285 if(sps && pps && (idr||sli>3) && res<(sps+pps+idr))
286 return AVPROBE_SCORE_MAX/2+1; // +1 for .mpg
287 return 0;
288 }
289 #endif
290
291 #if CONFIG_H263_DEMUXER 244 #if CONFIG_H263_DEMUXER
292 static int h263_probe(AVProbeData *p) 245 static int h263_probe(AVProbeData *p)
293 { 246 {
294 uint64_t code= -1; 247 uint64_t code= -1;
295 int i; 248 int i;
660 ff_raw_write_packet, 613 ff_raw_write_packet,
661 .flags= AVFMT_NOTIMESTAMPS, 614 .flags= AVFMT_NOTIMESTAMPS,
662 }; 615 };
663 #endif 616 #endif
664 617
665 #if CONFIG_H264_DEMUXER
666 AVInputFormat h264_demuxer = {
667 "h264",
668 NULL_IF_CONFIG_SMALL("raw H.264 video format"),
669 0,
670 h264_probe,
671 ff_raw_video_read_header,
672 ff_raw_read_partial_packet,
673 .flags= AVFMT_GENERIC_INDEX,
674 .extensions = "h26l,h264,264", //FIXME remove after writing mpeg4_probe
675 .value = CODEC_ID_H264,
676 };
677 #endif
678
679 #if CONFIG_H264_MUXER 618 #if CONFIG_H264_MUXER
680 AVOutputFormat h264_muxer = { 619 AVOutputFormat h264_muxer = {
681 "h264", 620 "h264",
682 NULL_IF_CONFIG_SMALL("raw H.264 video format"), 621 NULL_IF_CONFIG_SMALL("raw H.264 video format"),
683 NULL, 622 NULL,