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_MAX/2+1; // +1 for .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)
#define FF_DEF_RAWVIDEO_DEMUXER(shortname, longname, probe, ext, id)
Definition: rawdec.h:52
initialize output if(nPeaks >3)%at least 3 peaks in spectrum for trying to find f0 nf0peaks
static int h264_probe(AVProbeData *p)
Definition: h264dec.c:25
int buf_size
Size of buf except extra allocated bytes.
Definition: avformat.h:337
unsigned char * buf
Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero.
Definition: avformat.h:336
or the Software in violation of any applicable export control laws in any jurisdiction Except as provided by mandatorily applicable UPF has no obligation to provide you with source code to the Software In the event Software contains any source code
synthesis window for stochastic i
This structure contains the data a format has to probe a file.
Definition: avformat.h:334
#define type
#define AVPROBE_SCORE_MAX
maximum score, half of that is used for file-extension-based detection
Definition: avformat.h:340
static void idr(H264Context *h)
instantaneous decoder refresh.
Definition: h264.c:2619
Main libavformat public API header.