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
h261dec.c
Go to the documentation of this file.
1
/*
2
* RAW H.261 video demuxer
3
* Copyright (c) 2009 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 "
libavcodec/get_bits.h
"
23
#include "
avformat.h
"
24
#include "
rawdec.h
"
25
26
static
int
h261_probe
(
AVProbeData
*p)
27
{
28
int
i;
29
int
valid_psc=0;
30
int
invalid_psc=0;
31
int
next_gn=0;
32
int
src_fmt=0;
33
34
for
(i=0; i<p->
buf_size
; i++){
35
if
((
AV_RB16
(&p->
buf
[i]) - 1) < 0xFFU) {
36
int
shift
=
av_log2_16bit
(p->
buf
[i+1]);
37
uint32_t code =
AV_RB64
(&p->
buf
[
FFMAX
(i-1, 0)]) >> (24+
shift
);
38
if
((code & 0xffff0000) == 0x10000) {
39
int
gn= (code>>12)&0xf;
40
if
(!gn)
41
src_fmt= code&8;
42
if
(gn != next_gn) invalid_psc++;
43
else
valid_psc++;
44
45
if
(src_fmt){
// CIF
46
static
const
int
lut[16]={1,2,3,4,5,6,7,8,9,10,11,12,0,16,16,16};
47
next_gn = lut[gn];
48
}
else
{
//QCIF
49
static
const
int
lut[16]={1,3,16,5,16,0,16,16,16,16,16,16,16,16,16,16};
50
next_gn = lut[gn];
51
}
52
}
53
}
54
}
55
if
(valid_psc > 2*invalid_psc + 6){
56
return
AVPROBE_SCORE_EXTENSION
;
57
}
else
if
(valid_psc > 2*invalid_psc + 2)
58
return
AVPROBE_SCORE_EXTENSION
/ 2;
59
return
0;
60
}
61
62
FF_DEF_RAWVIDEO_DEMUXER
(h261,
"raw H.261"
,
h261_probe
,
"h261"
,
AV_CODEC_ID_H261
)
Generated on Fri Dec 5 2014 04:41:54 for FFmpeg by
1.8.2