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  uint32_t code= -1;
29  int i;
30  int valid_psc=0;
31  int invalid_psc=0;
32  int next_gn=0;
33  int src_fmt=0;
34  GetBitContext gb;
35 
36  init_get_bits(&gb, p->buf, p->buf_size*8);
37 
38  for(i=0; i<p->buf_size*8; i++){
39  if ((code & 0x01ff0000) || !(code & 0xff00)) {
40  code = (code<<8) + get_bits(&gb, 8);
41  i += 7;
42  } else
43  code = (code<<1) + get_bits1(&gb);
44  if ((code & 0xffff0000) == 0x10000) {
45  int gn= (code>>12)&0xf;
46  if(!gn)
47  src_fmt= code&8;
48  if(gn != next_gn) invalid_psc++;
49  else valid_psc++;
50 
51  if(src_fmt){ // CIF
52  next_gn= (gn+1 )%13;
53  }else{ //QCIF
54  next_gn= (gn+1+!!gn)% 7;
55  }
56  }
57  }
58  if(valid_psc > 2*invalid_psc + 6){
59  return 50;
60  }else if(valid_psc > 2*invalid_psc + 2)
61  return 25;
62  return 0;
63 }
64 
65 FF_DEF_RAWVIDEO_DEMUXER(h261, "raw H.261", h261_probe, "h261", AV_CODEC_ID_H261)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:240
#define FF_DEF_RAWVIDEO_DEMUXER(shortname, longname, probe, ext, id)
Definition: rawdec.h:52
bitstream reader API header.
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
static int h261_probe(AVProbeData *p)
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:273
synthesis window for stochastic i
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
Definition: get_bits.h:379
This structure contains the data a format has to probe a file.
Definition: avformat.h:334
Main libavformat public API header.