cavsvideodec.c
Go to the documentation of this file.
1 /*
2  * RAW Chinese AVS video demuxer
3  * Copyright (c) 2009 Stefan Gehrer <stefan.gehrer@gmx.de>
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 #define CAVS_SEQ_START_CODE 0x000001b0
26 #define CAVS_PIC_I_START_CODE 0x000001b3
27 #define CAVS_UNDEF_START_CODE 0x000001b4
28 #define CAVS_PIC_PB_START_CODE 0x000001b6
29 #define CAVS_VIDEO_EDIT_CODE 0x000001b7
30 #define CAVS_PROFILE_JIZHUN 0x20
31 
33 {
34  uint32_t code= -1;
35  int pic=0, seq=0, slice_pos = 0;
36  int i;
37 
38  for(i=0; i<p->buf_size; i++){
39  code = (code<<8) + p->buf[i];
40  if ((code & 0xffffff00) == 0x100) {
41  if(code < CAVS_SEQ_START_CODE) {
42  /* slices have to be consecutive */
43  if(code < slice_pos)
44  return 0;
45  slice_pos = code;
46  } else {
47  slice_pos = 0;
48  }
49  if (code == CAVS_SEQ_START_CODE) {
50  seq++;
51  /* check for the only currently supported profile */
52  if(p->buf[i+1] != CAVS_PROFILE_JIZHUN)
53  return 0;
54  } else if ((code == CAVS_PIC_I_START_CODE) ||
55  (code == CAVS_PIC_PB_START_CODE)) {
56  pic++;
57  } else if ((code == CAVS_UNDEF_START_CODE) ||
58  (code > CAVS_VIDEO_EDIT_CODE)) {
59  return 0;
60  }
61  }
62  }
63  if(seq && seq*9<=pic*10)
64  return AVPROBE_SCORE_MAX/2;
65  return 0;
66 }
67 
68 FF_DEF_RAWVIDEO_DEMUXER(cavsvideo, "raw Chinese AVS (Audio Video Standard)", cavsvideo_probe, NULL, AV_CODEC_ID_CAVS)
#define FF_DEF_RAWVIDEO_DEMUXER(shortname, longname, probe, ext, id)
Definition: rawdec.h:52
#define CAVS_PIC_I_START_CODE
Definition: cavsvideodec.c:26
initialize output if(nPeaks >3)%at least 3 peaks in spectrum for trying to find f0 nf0peaks
static int cavsvideo_probe(AVProbeData *p)
Definition: cavsvideodec.c:32
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 CAVS_SEQ_START_CODE
Definition: cavsvideodec.c:25
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
#define CAVS_VIDEO_EDIT_CODE
Definition: cavsvideodec.c:29
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 CAVS_PROFILE_JIZHUN
Definition: cavsvideodec.c:30
#define CAVS_UNDEF_START_CODE
Definition: cavsvideodec.c:27
#define CAVS_PIC_PB_START_CODE
Definition: cavsvideodec.c:28