2 * RAW H.264 video demuxer
3 * Copyright (c) 2008 Michael Niedermayer <michaelni@gmx.at>
5 * This file is part of Libav.
7 * Libav is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * Libav is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with Libav; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25 static int h264_probe(AVProbeData
*p
)
28 int sps
=0, pps
=0, idr
=0, res
=0, sli
=0;
31 for(i
=0; i
<p
->buf_size
; i
++){
32 code
= (code
<<8) + p
->buf
[i
];
33 if ((code
& 0xffffff00) == 0x100) {
34 int ref_idc
= (code
>>5)&3;
35 int type
= code
& 0x1F;
36 static const int8_t ref_zero
[32]={
37 2, 0, 0, 0, 0,-1, 1,-1,
38 -1, 1, 1, 1, 1,-1, 2, 2,
39 2, 2, 2, 0, 2, 2, 2, 2,
40 2, 2, 2, 2, 2, 2, 2, 2
43 if(code
& 0x80) //forbidden bit
46 if(ref_zero
[type
] == 1 && ref_idc
)
48 if(ref_zero
[type
] ==-1 && !ref_idc
)
50 if(ref_zero
[type
] == 2)
57 if (p
->buf
[i
+ 2] & 0x03)
65 if(sps
&& pps
&& (idr
||sli
>3) && res
<(sps
+pps
+idr
))
66 return AVPROBE_SCORE_MAX
/2+1; // +1 for .mpg
70 FF_DEF_RAWVIDEO_DEMUXER(h264
, "raw H.264 video", h264_probe
, "h26l,h264,264", AV_CODEC_ID_H264
)