FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavformat
h264dec.c
Go to the documentation of this file.
1
/*
2
* RAW H.264 video demuxer
3
* Copyright (c) 2008 Michael Niedermayer <michaelni@gmx.at>
4
*
5
* This file is part of FFmpeg.
6
*
7
* FFmpeg 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.
11
*
12
* FFmpeg 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.
16
*
17
* You should have received a copy of the GNU Lesser General Public
18
* License along with FFmpeg; if not, write to the Free Software
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
*/
21
22
#include "
avformat.h
"
23
#include "
rawdec.h
"
24
25
static
int
h264_probe
(
AVProbeData
*p)
26
{
27
uint32_t code= -1;
28
int
sps=0, pps=0,
idr
=0,
res
=0, sli=0;
29
int
i;
30
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
41
};
42
43
if
(code & 0x80)
//forbidden bit
44
return
0;
45
46
if
(ref_zero[type] == 1 && ref_idc)
47
return
0;
48
if
(ref_zero[type] ==-1 && !ref_idc)
49
return
0;
50
if
(ref_zero[type] == 2)
51
res
++;
52
53
switch
(type){
54
case
1: sli++;
break
;
55
case
5:
idr
++;
break
;
56
case
7:
57
if
(p->
buf
[i + 2] & 0x03)
58
return
0;
59
sps++;
60
break
;
61
case
8: pps++;
break
;
62
}
63
}
64
}
65
if
(sps && pps && (
idr
||sli>3) &&
res
<(sps+pps+
idr
))
66
return
AVPROBE_SCORE_EXTENSION
+ 1;
// 1 more than .mpg
67
return
0;
68
}
69
70
FF_DEF_RAWVIDEO_DEMUXER
(h264 ,
"raw H.264 video"
,
h264_probe
,
"h26l,h264,264"
,
AV_CODEC_ID_H264
)
Generated on Wed Jul 10 2013 23:48:12 for FFmpeg by
1.8.2