mpeg12.c
Go to the documentation of this file.
1 /*
2  * MPEG-1/2 decoder
3  * Copyright (c) 2000, 2001 Fabrice Bellard
4  * Copyright (c) 2002-2004 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 /**
24  * @file
25  * MPEG-1/2 decoder
26  */
27 
28 #define UNCHECKED_BITSTREAM_READER 1
29 
30 //#define DEBUG
31 #include "libavutil/avassert.h"
32 #include "libavutil/timecode.h"
33 
34 #include "internal.h"
35 #include "avcodec.h"
36 #include "dsputil.h"
37 #include "mpegvideo.h"
38 #include "error_resilience.h"
39 #include "mpeg12.h"
40 #include "mpeg12data.h"
41 #include "mpeg12decdata.h"
42 #include "bytestream.h"
43 #include "vdpau_internal.h"
44 #include "xvmc_internal.h"
45 #include "thread.h"
46 
47 
49 
50 #define INIT_2D_VLC_RL(rl, static_size)\
51 {\
52  static RL_VLC_ELEM rl_vlc_table[static_size];\
53  INIT_VLC_STATIC(&rl.vlc, TEX_VLC_BITS, rl.n + 2,\
54  &rl.table_vlc[0][1], 4, 2,\
55  &rl.table_vlc[0][0], 4, 2, static_size);\
56 \
57  rl.rl_vlc[0] = rl_vlc_table;\
58  init_2d_vlc_rl(&rl);\
59 }
60 
61 static void init_2d_vlc_rl(RLTable *rl)
62 {
63  int i;
64 
65  for (i = 0; i < rl->vlc.table_size; i++) {
66  int code = rl->vlc.table[i][0];
67  int len = rl->vlc.table[i][1];
68  int level, run;
69 
70  if (len == 0) { // illegal code
71  run = 65;
72  level = MAX_LEVEL;
73  } else if (len<0) { //more bits needed
74  run = 0;
75  level = code;
76  } else {
77  if (code == rl->n) { //esc
78  run = 65;
79  level = 0;
80  } else if (code == rl->n+1) { //eob
81  run = 0;
82  level = 127;
83  } else {
84  run = rl->table_run [code] + 1;
85  level = rl->table_level[code];
86  }
87  }
88  rl->rl_vlc[0][i].len = len;
89  rl->rl_vlc[0][i].level = level;
90  rl->rl_vlc[0][i].run = run;
91  }
92 }
93 
95 {
96 
97  s->y_dc_scale_table =
99 
100 }
101 
103 {
104  s->last_dc[0] = 1 << (7 + s->intra_dc_precision);
105  s->last_dc[1] = s->last_dc[0];
106  s->last_dc[2] = s->last_dc[0];
107  memset(s->last_mv, 0, sizeof(s->last_mv));
108 }
109 
110 
111 /******************************************/
112 /* decoding */
113 
115 
118 
123 
125 {
126  static int done = 0;
127 
128  if (!done) {
129  done = 1;
130 
131  INIT_VLC_STATIC(&ff_dc_lum_vlc, DC_VLC_BITS, 12,
133  ff_mpeg12_vlc_dc_lum_code, 2, 2, 512);
134  INIT_VLC_STATIC(&ff_dc_chroma_vlc, DC_VLC_BITS, 12,
136  ff_mpeg12_vlc_dc_chroma_code, 2, 2, 514);
137  INIT_VLC_STATIC(&ff_mv_vlc, MV_VLC_BITS, 17,
138  &ff_mpeg12_mbMotionVectorTable[0][1], 2, 1,
139  &ff_mpeg12_mbMotionVectorTable[0][0], 2, 1, 518);
140  INIT_VLC_STATIC(&ff_mbincr_vlc, MBINCR_VLC_BITS, 36,
141  &ff_mpeg12_mbAddrIncrTable[0][1], 2, 1,
142  &ff_mpeg12_mbAddrIncrTable[0][0], 2, 1, 538);
143  INIT_VLC_STATIC(&ff_mb_pat_vlc, MB_PAT_VLC_BITS, 64,
144  &ff_mpeg12_mbPatTable[0][1], 2, 1,
145  &ff_mpeg12_mbPatTable[0][0], 2, 1, 512);
146 
147  INIT_VLC_STATIC(&ff_mb_ptype_vlc, MB_PTYPE_VLC_BITS, 7,
148  &table_mb_ptype[0][1], 2, 1,
149  &table_mb_ptype[0][0], 2, 1, 64);
150  INIT_VLC_STATIC(&ff_mb_btype_vlc, MB_BTYPE_VLC_BITS, 11,
151  &table_mb_btype[0][1], 2, 1,
152  &table_mb_btype[0][0], 2, 1, 64);
155 
158  }
159 }
160 
161 /**
162  * Find the end of the current frame in the bitstream.
163  * @return the position of the first byte of the next frame, or -1
164  */
166 {
167  int i;
168  uint32_t state = pc->state;
169 
170  /* EOF considered as end of frame */
171  if (buf_size == 0)
172  return 0;
173 
174 /*
175  0 frame start -> 1/4
176  1 first_SEQEXT -> 0/2
177  2 first field start -> 3/0
178  3 second_SEQEXT -> 2/0
179  4 searching end
180 */
181 
182  for (i = 0; i < buf_size; i++) {
183  av_assert1(pc->frame_start_found >= 0 && pc->frame_start_found <= 4);
184  if (pc->frame_start_found & 1) {
185  if (state == EXT_START_CODE && (buf[i] & 0xF0) != 0x80)
186  pc->frame_start_found--;
187  else if (state == EXT_START_CODE + 2) {
188  if ((buf[i] & 3) == 3)
189  pc->frame_start_found = 0;
190  else
191  pc->frame_start_found = (pc->frame_start_found + 1) & 3;
192  }
193  state++;
194  } else {
195  i = avpriv_find_start_code(buf + i, buf + buf_size, &state) - buf - 1;
196  if (pc->frame_start_found == 0 && state >= SLICE_MIN_START_CODE && state <= SLICE_MAX_START_CODE) {
197  i++;
198  pc->frame_start_found = 4;
199  }
200  if (state == SEQ_END_CODE) {
201  pc->frame_start_found = 0;
202  pc->state=-1;
203  return i+1;
204  }
205  if (pc->frame_start_found == 2 && state == SEQ_START_CODE)
206  pc->frame_start_found = 0;
207  if (pc->frame_start_found < 4 && state == EXT_START_CODE)
208  pc->frame_start_found++;
209  if (pc->frame_start_found == 4 && (state & 0xFFFFFF00) == 0x100) {
210  if (state < SLICE_MIN_START_CODE || state > SLICE_MAX_START_CODE) {
211  pc->frame_start_found = 0;
212  pc->state = -1;
213  return i - 3;
214  }
215  }
216  if (pc->frame_start_found == 0 && s && state == PICTURE_START_CODE) {
217  ff_fetch_timestamp(s, i - 3, 1);
218  }
219  }
220  }
221  pc->state = state;
222  return END_NOT_FOUND;
223 }
224 
#define MBINCR_VLC_BITS
Definition: mpeg12.h:31
int table_size
Definition: get_bits.h:66
const char * s
Definition: avisynth_c.h:668
#define SLICE_MAX_START_CODE
Definition: cavs.h:31
VLC ff_dc_lum_vlc
Definition: mpeg12.c:116
const uint8_t * y_dc_scale_table
qscale -> y_dc_scale table
Definition: mpegvideo.h:351
int last_mv[2][2][2]
last MV, used for MV prediction in MPEG1 & B-frame MPEG4
Definition: mpegvideo.h:433
av_cold void ff_mpeg12_init_vlcs(void)
Definition: mpeg12.c:124
const unsigned char ff_mpeg12_vlc_dc_lum_bits[12]
Definition: mpeg12data.c:55
void ff_init_rl(RLTable *rl, uint8_t static_store[2][2 *MAX_RUN+MAX_LEVEL+3])
Definition: mpegvideo.c:1304
void ff_mpeg1_clean_buffers(MpegEncContext *s)
Definition: mpeg12.c:102
mpegvideo header.
const uint16_t ff_mpeg12_vlc_dc_lum_code[12]
Definition: mpeg12data.c:52
const int8_t * table_level
Definition: rl.h:43
Timecode helpers header.
uint8_t run
Definition: svq3.c:136
#define SLICE_MIN_START_CODE
Definition: mpegvideo.h:81
int frame_start_found
Definition: parser.h:34
RLTable.
Definition: rl.h:38
#define MB_PAT_VLC_BITS
Definition: mpeg12.h:32
#define INIT_2D_VLC_RL(rl, static_size)
Definition: mpeg12.c:50
uint8_t
#define av_cold
Definition: attributes.h:78
RLTable ff_rl_mpeg2
Definition: mpeg12data.c:174
#define INIT_VLC_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size)
Definition: get_bits.h:445
int intra_dc_precision
Definition: mpegvideo.h:666
VLC ff_mv_vlc
Definition: mpeg12.c:114
#define MAX_LEVEL
Definition: rl.h:35
const uint8_t * avpriv_find_start_code(const uint8_t *p, const uint8_t *end, uint32_t *state)
void ff_fetch_timestamp(AVCodecParserContext *s, int off, int remove)
Fetch timestamps for a specific byte within the current access unit.
Definition: parser.c:88
int last_dc[3]
last DC values for MPEG1
Definition: mpegvideo.h:348
Multithreading support functions.
const uint16_t ff_mpeg12_vlc_dc_chroma_code[12]
Definition: mpeg12data.c:59
simple assert() macros that are a bit more flexible than ISO C assert().
#define SEQ_END_CODE
Definition: mpegvideo.h:77
VLC vlc
decoding only deprecated FIXME remove
Definition: rl.h:47
VLC ff_mb_pat_vlc
Definition: mpeg12.c:122
external API header
int8_t len
Definition: get_bits.h:71
Definition: get_bits.h:63
#define MB_PTYPE_VLC_BITS
Definition: mpeg12.h:33
int n
number of entries of table_vlc minus 1
Definition: rl.h:39
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Definition: avassert.h:53
#define MB_BTYPE_VLC_BITS
Definition: mpeg12.h:34
const unsigned char ff_mpeg12_vlc_dc_chroma_bits[12]
Definition: mpeg12data.c:62
RLTable ff_rl_mpeg1
Definition: mpeg12data.c:166
const int8_t * table_run
Definition: rl.h:42
#define EXT_START_CODE
Definition: cavs.h:32
FIXME Range Coding of cr are level
Definition: snow.txt:367
RL_VLC_ELEM * rl_vlc[32]
decoding only
Definition: rl.h:48
#define MV_VLC_BITS
Definition: ituh263dec.c:49
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
const uint8_t *const ff_mpeg2_dc_scale_table[4]
Definition: mpegvideo.c:120
VLC ff_dc_chroma_vlc
Definition: mpeg12.c:117
MPEG1/2 tables.
void * buf
Definition: avisynth_c.h:594
uint32_t state
contains the last few bytes in MSB order
Definition: parser.h:33
VLC ff_mb_ptype_vlc
Definition: mpeg12.c:120
synthesis window for stochastic i
MPEG1/2 decoder tables.
int ff_mpeg1_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size, AVCodecParserContext *s)
Find the end of the current frame in the bitstream.
Definition: mpeg12.c:165
static void init_2d_vlc_rl(RLTable *rl)
Definition: mpeg12.c:61
#define END_NOT_FOUND
Definition: parser.h:40
static uint32_t state
Definition: trasher.c:27
const uint8_t * c_dc_scale_table
qscale -> c_dc_scale table
Definition: mpegvideo.h:352
#define DC_VLC_BITS
Definition: intrax8.c:36
MpegEncContext.
Definition: mpegvideo.h:241
uint8_t run
Definition: get_bits.h:72
#define MAX_RUN
Definition: rl.h:34
common internal api header.
uint8_t ff_mpeg12_static_rl_table_store[2][2][2 *MAX_RUN+MAX_LEVEL+3]
Definition: mpeg12.c:48
VLC ff_mbincr_vlc
Definition: mpeg12.c:119
const uint8_t ff_mpeg12_mbPatTable[64][2]
Definition: mpeg12data.c:221
DSP utils.
void ff_mpeg12_common_init(MpegEncContext *s)
Definition: mpeg12.c:94
int len
#define SEQ_START_CODE
Definition: mpegvideo.h:78
const uint8_t ff_mpeg12_mbAddrIncrTable[36][2]
Definition: mpeg12data.c:182
VLC_TYPE(* table)[2]
code, bits
Definition: get_bits.h:65
static const uint8_t table_mb_btype[11][2]
Definition: mpeg12decdata.h:58
int16_t level
Definition: get_bits.h:70
const uint8_t ff_mpeg12_mbMotionVectorTable[17][2]
Definition: mpeg12data.c:288
#define PICTURE_START_CODE
Definition: mpegvideo.h:80
static const uint8_t table_mb_ptype[7][2]
Definition: mpeg12decdata.h:38
VLC ff_mb_btype_vlc
Definition: mpeg12.c:121