FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
h263.h
Go to the documentation of this file.
1 /*
2  * H263 internal header
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 #ifndef AVCODEC_H263_H
21 #define AVCODEC_H263_H
22 
23 #include <stdint.h>
24 #include "libavutil/rational.h"
25 #include "get_bits.h"
26 #include "mpegvideo.h"
27 #include "rl.h"
28 
29 #if !FF_API_ASPECT_EXTENDED
30 #define FF_ASPECT_EXTENDED 15
31 #endif
32 #define INT_BIT (CHAR_BIT * sizeof(int))
33 
34 // The defines below define the number of bits that are read at once for
35 // reading vlc values. Changing these may improve speed and data cache needs
36 // be aware though that decreasing them may need the number of stages that is
37 // passed to get_vlc* to be increased.
38 #define INTRA_MCBPC_VLC_BITS 6
39 #define INTER_MCBPC_VLC_BITS 7
40 #define CBPY_VLC_BITS 6
41 #define TEX_VLC_BITS 9
42 
43 #define H263_GOB_HEIGHT(h) ((h) <= 400 ? 1 : (h) <= 800 ? 2 : 4)
44 
45 extern const AVRational ff_h263_pixel_aspect[16];
46 extern const uint8_t ff_h263_cbpy_tab[16][2];
47 
48 extern const uint8_t ff_cbpc_b_tab[4][2];
49 
50 extern const uint8_t ff_mvtab[33][2];
51 
52 extern const uint8_t ff_h263_intra_MCBPC_code[9];
53 extern const uint8_t ff_h263_intra_MCBPC_bits[9];
54 
55 extern const uint8_t ff_h263_inter_MCBPC_code[28];
56 extern const uint8_t ff_h263_inter_MCBPC_bits[28];
57 extern const uint8_t ff_h263_mbtype_b_tab[15][2];
58 
61 extern VLC ff_h263_cbpy_vlc;
62 
63 extern const uint16_t ff_inter_vlc[103][2];
64 extern const int8_t ff_inter_level[102];
65 extern const int8_t ff_inter_run[102];
66 
68 
70 
71 extern const uint16_t ff_h263_format[8][2];
72 extern const uint8_t ff_modified_quant_tab[2][32];
73 extern const uint16_t ff_mba_max[6];
74 extern const uint8_t ff_mba_length[7];
75 
77 
79 
80 
81 int ff_h263_decode_motion(MpegEncContext * s, int pred, int f_code);
85  void *data, int *got_frame,
86  AVPacket *avpkt);
89  int16_t block[6][64],
90  int motion_x, int motion_y);
91 void ff_h263_encode_picture_header(MpegEncContext *s, int picture_number);
92 void ff_h263_encode_gob_header(MpegEncContext * s, int mb_line);
93 int16_t *ff_h263_pred_motion(MpegEncContext * s, int block, int dir,
94  int *px, int *py);
96 void ff_h263_decode_init_vlc(void);
104 int ff_h263_pred_dc(MpegEncContext * s, int n, int16_t **dc_val_ptr);
105 void ff_h263_pred_acdc(MpegEncContext * s, int16_t *block, int n);
106 
107 
108 /**
109  * Print picture info if FF_DEBUG_PICT_INFO is set.
110  */
112 
115  int16_t block[6][64]);
116 
117 /**
118  * Return the value of the 3bit "source format" syntax element.
119  * This represents some standard picture dimensions or indicates that
120  * width&height are explicitly stored later.
121  */
123 
126 void ff_h263_encode_motion(PutBitContext *pb, int val, int f_code);
127 
128 
129 static inline int h263_get_motion_length(int val, int f_code){
130  int l, bit_size, code;
131 
132  if (val == 0) {
133  return ff_mvtab[0][1];
134  } else {
135  bit_size = f_code - 1;
136  /* modulo encoding */
137  l= INT_BIT - 6 - bit_size;
138  val = (val<<l)>>l;
139  val--;
140  code = (val >> bit_size) + 1;
141 
142  return ff_mvtab[code][1] + 1 + bit_size;
143  }
144 }
145 
146 static inline void ff_h263_encode_motion_vector(MpegEncContext * s, int x, int y, int f_code){
147  if (s->avctx->flags2 & CODEC_FLAG2_NO_OUTPUT) {
148  skip_put_bits(&s->pb,
149  h263_get_motion_length(x, f_code)
150  +h263_get_motion_length(y, f_code));
151  }else{
152  ff_h263_encode_motion(&s->pb, x, f_code);
153  ff_h263_encode_motion(&s->pb, y, f_code);
154  }
155 }
156 
157 static inline int get_p_cbp(MpegEncContext * s,
158  int16_t block[6][64],
159  int motion_x, int motion_y){
160  int cbp, i;
161 
162  if (s->mpv_flags & FF_MPV_FLAG_CBP_RD) {
163  int best_cbpy_score= INT_MAX;
164  int best_cbpc_score= INT_MAX;
165  int cbpc = (-1), cbpy= (-1);
166  const int offset= (s->mv_type==MV_TYPE_16X16 ? 0 : 16) + (s->dquant ? 8 : 0);
167  const int lambda= s->lambda2 >> (FF_LAMBDA_SHIFT - 6);
168 
169  for(i=0; i<4; i++){
170  int score= ff_h263_inter_MCBPC_bits[i + offset] * lambda;
171  if(i&1) score += s->coded_score[5];
172  if(i&2) score += s->coded_score[4];
173 
174  if(score < best_cbpc_score){
175  best_cbpc_score= score;
176  cbpc= i;
177  }
178  }
179 
180  for(i=0; i<16; i++){
181  int score= ff_h263_cbpy_tab[i ^ 0xF][1] * lambda;
182  if(i&1) score += s->coded_score[3];
183  if(i&2) score += s->coded_score[2];
184  if(i&4) score += s->coded_score[1];
185  if(i&8) score += s->coded_score[0];
186 
187  if(score < best_cbpy_score){
188  best_cbpy_score= score;
189  cbpy= i;
190  }
191  }
192  cbp= cbpc + 4*cbpy;
193  if ((motion_x | motion_y | s->dquant) == 0 && s->mv_type==MV_TYPE_16X16){
194  if(best_cbpy_score + best_cbpc_score + 2*lambda >= 0)
195  cbp= 0;
196  }
197 
198  for (i = 0; i < 6; i++) {
199  if (s->block_last_index[i] >= 0 && ((cbp >> (5 - i))&1)==0 ){
200  s->block_last_index[i]= -1;
201  s->bdsp.clear_block(s->block[i]);
202  }
203  }
204  }else{
205  cbp= 0;
206  for (i = 0; i < 6; i++) {
207  if (s->block_last_index[i] >= 0)
208  cbp |= 1 << (5 - i);
209  }
210  }
211  return cbp;
212 }
213 
214 #endif /* AVCODEC_H263_H */
#define av_const
Definition: attributes.h:68
const char const char void * val
Definition: avisynth_c.h:634
const char * s
Definition: avisynth_c.h:631
const int8_t ff_inter_run[102]
Definition: h263data.h:146
const uint8_t ff_cbpc_b_tab[4][2]
Definition: h263data.h:78
const int8_t ff_inter_level[102]
Definition: h263data.h:130
void ff_h263_encode_picture_header(MpegEncContext *s, int picture_number)
Definition: ituh263enc.c:103
ptrdiff_t const GLvoid * data
Definition: opengl_enc.c:101
void(* clear_block)(int16_t *block)
Definition: blockdsp.h:35
void ff_h263_encode_init(MpegEncContext *s)
Definition: ituh263enc.c:761
int ff_h263_pred_dc(MpegEncContext *s, int n, int16_t **dc_val_ptr)
Definition: h263.c:98
VLC ff_h263_intra_MCBPC_vlc
Definition: ituh263dec.c:95
RLTable ff_h263_rl_inter
Definition: h263data.h:162
VLC ff_h263_cbpy_vlc
Definition: ituh263dec.c:97
const uint8_t ff_h263_intra_MCBPC_code[9]
Definition: h263data.h:36
const uint8_t ff_h263_cbpy_tab[16][2]
Definition: h263data.h:85
static void skip_put_bits(PutBitContext *s, int n)
Skip the given number of bits.
Definition: put_bits.h:241
int coded_score[12]
Definition: mpegvideo.h:386
mpegvideo header.
int mpv_flags
flags set by private options
Definition: mpegvideo.h:586
const uint16_t ff_h263_format[8][2]
Definition: h263data.h:239
#define FF_LAMBDA_SHIFT
Definition: avutil.h:218
RLTable.
Definition: rl.h:38
const uint8_t ff_modified_quant_tab[2][32]
Definition: h263data.h:253
void ff_h263_encode_motion(PutBitContext *pb, int val, int f_code)
Definition: ituh263enc.c:646
int ff_h263_decode_mb(MpegEncContext *s, int16_t block[6][64])
Definition: ituh263dec.c:607
#define FF_MPV_FLAG_CBP_RD
Definition: mpegvideo.h:622
void ff_h263_decode_init_vlc(void)
Definition: ituh263dec.c:105
uint8_t
const uint8_t ff_h263_intra_MCBPC_bits[9]
Definition: h263data.h:37
const uint8_t ff_mvtab[33][2]
Definition: h263data.h:91
void ff_h263_loop_filter(MpegEncContext *s)
Definition: h263.c:139
const uint8_t ff_h263_inter_MCBPC_bits[28]
Definition: h263data.h:50
int ff_intel_h263_decode_picture_header(MpegEncContext *s)
Definition: intelh263dec.c:26
RLTable ff_rl_intra_aic
Definition: h263data.h:231
int ff_h263_decode_mba(MpegEncContext *s)
Definition: ituh263dec.c:136
void ff_init_qscale_tab(MpegEncContext *s)
init s->current_picture.qscale_table from s->lambda_table
bitstream reader API header.
const AVRational ff_h263_pixel_aspect[16]
Definition: h263data.h:275
#define MAX_LEVEL
Definition: rl.h:35
int dquant
qscale difference to prev qscale
Definition: mpegvideo.h:279
const uint8_t ff_mba_length[7]
Definition: h263data.h:271
uint8_t ff_h263_static_rl_table_store[2][2][2 *MAX_RUN+MAX_LEVEL+3]
Definition: h263.c:43
av_const int ff_h263_aspect_to_info(AVRational aspect)
Return the 4 bit value that specifies the given aspect ratio.
Definition: ituh263enc.c:89
rl header.
static const uint8_t offset[127][2]
Definition: vf_spp.c:92
Definition: get_bits.h:63
void ff_clean_h263_qscales(MpegEncContext *s)
modify qscale so that encoding is actually possible in h263 (limit difference to -2..2)
Definition: ituh263enc.c:266
int ff_h263_decode_init(AVCodecContext *avctx)
Definition: h263dec.c:62
VLC ff_h263_inter_MCBPC_vlc
Definition: ituh263dec.c:96
int ff_h263_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: h263dec.c:409
float y
enum AVPixelFormat ff_h263_hwaccel_pixfmt_list_420[]
Definition: h263dec.c:719
const uint16_t ff_mba_max[6]
Definition: h263data.h:267
int block_last_index[12]
last non zero coefficient in block
Definition: mpegvideo.h:155
int n
Definition: avisynth_c.h:547
const uint16_t ff_inter_vlc[103][2]
Definition: h263data.h:101
const uint8_t ff_h263_inter_MCBPC_code[28]
Definition: h263data.h:41
void ff_h263_pred_acdc(MpegEncContext *s, int16_t *block, int n)
Definition: h263.c:226
int av_const h263_get_picture_format(int width, int height)
Return the value of the 3bit "source format" syntax element.
static const float pred[4]
Definition: siprdata.h:259
#define MV_TYPE_16X16
1 vector for the whole mb
Definition: mpegvideo.h:333
unsigned int lambda2
(lambda*lambda) >> FF_LAMBDA_SHIFT
Definition: mpegvideo.h:276
BlockDSPContext bdsp
Definition: mpegvideo.h:295
main external API structure.
Definition: avcodec.h:1241
void ff_h263_encode_mba(MpegEncContext *s)
Definition: ituh263enc.c:825
BYTE int const BYTE int int int height
Definition: avisynth_c.h:676
void ff_h263_encode_gob_header(MpegEncContext *s, int mb_line)
Encode a group of blocks header.
Definition: ituh263enc.c:240
rational number numerator/denominator
Definition: rational.h:43
static void ff_h263_encode_motion_vector(MpegEncContext *s, int x, int y, int f_code)
Definition: h263.h:146
int ff_h263_decode_picture_header(MpegEncContext *s)
Definition: ituh263dec.c:873
const uint8_t ff_h263_mbtype_b_tab[15][2]
Definition: h263data.h:60
int ff_h263_resync(MpegEncContext *s)
Decode the group of blocks / video packet header.
Definition: ituh263dec.c:209
int16_t * ff_h263_pred_motion(MpegEncContext *s, int block, int dir, int *px, int *py)
Definition: h263.c:313
MpegEncContext.
Definition: mpegvideo.h:150
#define MAX_RUN
Definition: rl.h:34
struct AVCodecContext * avctx
Definition: mpegvideo.h:167
PutBitContext pb
bit output
Definition: mpegvideo.h:220
rational numbers
#define CODEC_FLAG2_NO_OUTPUT
Skip bitstream encoding.
Definition: avcodec.h:766
void ff_h263_encode_mb(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
Definition: ituh263enc.c:447
int ff_h263_decode_end(AVCodecContext *avctx)
Definition: h263dec.c:149
void ff_h263_update_motion_val(MpegEncContext *s)
Definition: h263.c:46
int16_t(* block)[64]
points to one of the following blocks
Definition: mpegvideo.h:558
static int get_p_cbp(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
Definition: h263.h:157
int flags2
CODEC_FLAG2_*.
Definition: avcodec.h:1342
int ff_h263_decode_gob_header(MpegEncContext *s)
static int h263_get_motion_length(int val, int f_code)
Definition: h263.h:129
int ff_h263_decode_motion(MpegEncContext *s, int pred, int f_code)
Definition: ituh263dec.c:251
void ff_h263_show_pict_info(MpegEncContext *s)
Print picture info if FF_DEBUG_PICT_INFO is set.
Definition: ituh263dec.c:73
AVPixelFormat
Pixel format.
Definition: pixfmt.h:61
This structure stores compressed data.
Definition: avcodec.h:1139
#define INT_BIT
Definition: h263.h:32
static int width
static int16_t block[64]
Definition: dct-test.c:110