mpegvideodec.c
Go to the documentation of this file.
1 /*
2  * RAW MPEG video demuxer
3  * Copyright (c) 2002-2003 Fabrice Bellard
4  * Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22 
23 #include "avformat.h"
24 #include "rawdec.h"
25 
26 #define SEQ_START_CODE 0x000001b3
27 #define GOP_START_CODE 0x000001b8
28 #define PICTURE_START_CODE 0x00000100
29 #define SLICE_START_CODE 0x00000101
30 #define PACK_START_CODE 0x000001ba
31 #define VIDEO_ID 0x000001e0
32 #define AUDIO_ID 0x000001c0
33 
35 {
36  uint32_t code= -1;
37  int pic=0, seq=0, slice=0, pspack=0, vpes=0, apes=0, res=0, sicle=0;
38  int i;
39  uint32_t last = 0;
40 
41  for(i=0; i<p->buf_size; i++){
42  code = (code<<8) + p->buf[i];
43  if ((code & 0xffffff00) == 0x100) {
44  switch(code){
45  case SEQ_START_CODE: seq++; break;
46  case PICTURE_START_CODE: pic++; break;
47  case PACK_START_CODE: pspack++; break;
48  case 0x1b6:
49  res++; break;
50  }
51  if (code >= SLICE_START_CODE && code <= 0x1af) {
52  if (last >= SLICE_START_CODE && last <= 0x1af) {
53  if (code >= last) slice++;
54  else sicle++;
55  }else{
56  if (code == SLICE_START_CODE) slice++;
57  else sicle++;
58  }
59  }
60  if ((code & 0x1f0) == VIDEO_ID) vpes++;
61  else if((code & 0x1e0) == AUDIO_ID) apes++;
62  last = code;
63  }
64  }
65  if(seq && seq*9<=pic*10 && pic*9<=slice*10 && !pspack && !apes && !res && slice > sicle) {
66  if(vpes) return AVPROBE_SCORE_MAX/8;
67  else return pic>1 ? AVPROBE_SCORE_MAX/2+1 : AVPROBE_SCORE_MAX/4; // +1 for .mpg
68  }
69  return 0;
70 }
71 
#define FF_DEF_RAWVIDEO_DEMUXER(shortname, longname, probe, ext, id)
Definition: rawdec.h:52
#define PICTURE_START_CODE
Definition: mpegvideodec.c:28
#define AUDIO_ID
Definition: mpegvideodec.c:32
#define SEQ_START_CODE
Definition: mpegvideodec.c:26
initialize output if(nPeaks >3)%at least 3 peaks in spectrum for trying to find f0 nf0peaks
static int mpegvideo_probe(AVProbeData *p)
Definition: mpegvideodec.c:34
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
#define PACK_START_CODE
Definition: mpegvideodec.c:30
NULL
Definition: eval.c:55
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 AVPROBE_SCORE_MAX
maximum score, half of that is used for file-extension-based detection
Definition: avformat.h:340
Main libavformat public API header.
#define VIDEO_ID
Definition: mpegvideodec.c:31
#define SLICE_START_CODE
Definition: mpegvideodec.c:29