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 // The defines below define the number of bits that are read at once for
30 // reading vlc values. Changing these may improve speed and data cache needs
31 // be aware though that decreasing them may need the number of stages that is
32 // passed to get_vlc* to be increased.
33 #define INTRA_MCBPC_VLC_BITS 6
34 #define INTER_MCBPC_VLC_BITS 7
35 #define CBPY_VLC_BITS 6
36 #define TEX_VLC_BITS 9
37 
38 extern const AVRational ff_h263_pixel_aspect[16];
39 extern const uint8_t ff_h263_cbpy_tab[16][2];
40 
41 extern const uint8_t ff_cbpc_b_tab[4][2];
42 
43 extern const uint8_t ff_mvtab[33][2];
44 
45 extern const uint8_t ff_h263_intra_MCBPC_code[9];
46 extern const uint8_t ff_h263_intra_MCBPC_bits[9];
47 
48 extern const uint8_t ff_h263_inter_MCBPC_code[28];
49 extern const uint8_t ff_h263_inter_MCBPC_bits[28];
50 extern const uint8_t ff_h263_mbtype_b_tab[15][2];
51 
54 extern VLC ff_h263_cbpy_vlc;
55 
57 
59 
60 extern const uint16_t ff_h263_format[8][2];
61 extern const uint8_t ff_modified_quant_tab[2][32];
62 extern const uint16_t ff_mba_max[6];
63 extern const uint8_t ff_mba_length[7];
64 
66 
68 
69 
70 int ff_h263_decode_motion(MpegEncContext * s, int pred, int f_code);
74  void *data, int *got_frame,
75  AVPacket *avpkt);
78  int16_t block[6][64],
79  int motion_x, int motion_y);
80 void ff_h263_encode_picture_header(MpegEncContext *s, int picture_number);
81 void ff_h263_encode_gob_header(MpegEncContext * s, int mb_line);
82 int16_t *ff_h263_pred_motion(MpegEncContext * s, int block, int dir,
83  int *px, int *py);
85 void ff_h263_decode_init_vlc(void);
93 int ff_h263_pred_dc(MpegEncContext * s, int n, int16_t **dc_val_ptr);
94 void ff_h263_pred_acdc(MpegEncContext * s, int16_t *block, int n);
95 
96 
97 /**
98  * Print picture info if FF_DEBUG_PICT_INFO is set.
99  */
101 
104  int16_t block[6][64]);
105 
106 /**
107  * Return the value of the 3bit "source format" syntax element.
108  * This represents some standard picture dimensions or indicates that
109  * width&height are explicitly stored later.
110  */
112 
117 void ff_h263_encode_motion(MpegEncContext * s, int val, int f_code);
118 
119 
120 static inline int h263_get_motion_length(MpegEncContext * s, int val, int f_code){
121  int l, bit_size, code;
122 
123  if (val == 0) {
124  return ff_mvtab[0][1];
125  } else {
126  bit_size = f_code - 1;
127  /* modulo encoding */
128  l= INT_BIT - 6 - bit_size;
129  val = (val<<l)>>l;
130  val--;
131  code = (val >> bit_size) + 1;
132 
133  return ff_mvtab[code][1] + 1 + bit_size;
134  }
135 }
136 
137 static inline void ff_h263_encode_motion_vector(MpegEncContext * s, int x, int y, int f_code){
138  if(s->flags2 & CODEC_FLAG2_NO_OUTPUT){
139  skip_put_bits(&s->pb,
140  h263_get_motion_length(s, x, f_code)
141  +h263_get_motion_length(s, y, f_code));
142  }else{
143  ff_h263_encode_motion(s, x, f_code);
144  ff_h263_encode_motion(s, y, f_code);
145  }
146 }
147 
148 static inline int get_p_cbp(MpegEncContext * s,
149  int16_t block[6][64],
150  int motion_x, int motion_y){
151  int cbp, i;
152 
153  if (s->mpv_flags & FF_MPV_FLAG_CBP_RD) {
154  int best_cbpy_score= INT_MAX;
155  int best_cbpc_score= INT_MAX;
156  int cbpc = (-1), cbpy= (-1);
157  const int offset= (s->mv_type==MV_TYPE_16X16 ? 0 : 16) + (s->dquant ? 8 : 0);
158  const int lambda= s->lambda2 >> (FF_LAMBDA_SHIFT - 6);
159 
160  for(i=0; i<4; i++){
161  int score= ff_h263_inter_MCBPC_bits[i + offset] * lambda;
162  if(i&1) score += s->coded_score[5];
163  if(i&2) score += s->coded_score[4];
164 
165  if(score < best_cbpc_score){
166  best_cbpc_score= score;
167  cbpc= i;
168  }
169  }
170 
171  for(i=0; i<16; i++){
172  int score= ff_h263_cbpy_tab[i ^ 0xF][1] * lambda;
173  if(i&1) score += s->coded_score[3];
174  if(i&2) score += s->coded_score[2];
175  if(i&4) score += s->coded_score[1];
176  if(i&8) score += s->coded_score[0];
177 
178  if(score < best_cbpy_score){
179  best_cbpy_score= score;
180  cbpy= i;
181  }
182  }
183  cbp= cbpc + 4*cbpy;
184  if ((motion_x | motion_y | s->dquant) == 0 && s->mv_type==MV_TYPE_16X16){
185  if(best_cbpy_score + best_cbpc_score + 2*lambda >= 0)
186  cbp= 0;
187  }
188 
189  for (i = 0; i < 6; i++) {
190  if (s->block_last_index[i] >= 0 && ((cbp >> (5 - i))&1)==0 ){
191  s->block_last_index[i]= -1;
192  s->dsp.clear_block(s->block[i]);
193  }
194  }
195  }else{
196  cbp= 0;
197  for (i = 0; i < 6; i++) {
198  if (s->block_last_index[i] >= 0)
199  cbp |= 1 << (5 - i);
200  }
201  }
202  return cbp;
203 }
204 
205 static inline void memsetw(short *tab, int val, int n)
206 {
207  int i;
208  for(i=0;i<n;i++)
209  tab[i] = val;
210 }
211 
212 #endif /* AVCODEC_H263_H */
#define av_const
Definition: attributes.h:72
const char * s
Definition: avisynth_c.h:668
const uint8_t ff_cbpc_b_tab[4][2]
Definition: h263data.h:78
void ff_h263_encode_picture_header(MpegEncContext *s, int picture_number)
Definition: ituh263enc.c:101
void ff_h263_encode_init(MpegEncContext *s)
Definition: ituh263enc.c:767
int ff_h263_pred_dc(MpegEncContext *s, int n, int16_t **dc_val_ptr)
Definition: h263.c:100
VLC ff_h263_intra_MCBPC_vlc
Definition: ituh263dec.c:93
RLTable ff_h263_rl_inter
Definition: h263data.h:162
VLC ff_h263_cbpy_vlc
Definition: ituh263dec.c:95
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:220
int coded_score[12]
Definition: mpegvideo.h:489
mpegvideo header.
int mpv_flags
flags set by private options
Definition: mpegvideo.h:732
const uint16_t ff_h263_format[8][2]
Definition: h263data.h:239
#define FF_LAMBDA_SHIFT
Definition: avutil.h:167
void(* clear_block)(int16_t *block)
Definition: dsputil.h:145
RLTable.
Definition: rl.h:38
const uint8_t ff_modified_quant_tab[2][32]
Definition: h263data.h:253
int ff_h263_decode_mb(MpegEncContext *s, int16_t block[6][64])
Definition: ituh263dec.c:605
#define FF_MPV_FLAG_CBP_RD
Definition: mpegvideo.h:754
void ff_h263_decode_init_vlc(void)
Definition: ituh263dec.c:103
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:141
end end
const uint8_t * ff_h263_find_resync_marker(MpegEncContext *s, const uint8_t *p, const uint8_t *end)
int ff_h263_get_gob_height(MpegEncContext *s)
Get the GOB height based on picture height.
Definition: h263.c:377
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:25
RLTable ff_rl_intra_aic
Definition: h263data.h:231
int ff_h263_decode_mba(MpegEncContext *s)
Definition: ituh263dec.c:134
void ff_init_qscale_tab(MpegEncContext *s)
init s->current_picture.qscale_table from s->lambda_table
bitstream reader API header.
int flags2
AVCodecContext.flags2.
Definition: mpegvideo.h:261
const AVRational ff_h263_pixel_aspect[16]
Definition: h263data.h:280
#define MAX_LEVEL
Definition: rl.h:35
int dquant
qscale difference to prev qscale
Definition: mpegvideo.h:375
const uint8_t ff_mba_length[7]
Definition: h263data.h:271
Discrete Time axis x
static void memsetw(short *tab, int val, int n)
Definition: h263.h:205
Spectrum Plot time data
uint8_t ff_h263_static_rl_table_store[2][2][2 *MAX_RUN+MAX_LEVEL+3]
Definition: h263.c:45
av_const int ff_h263_aspect_to_info(AVRational aspect)
Return the 4 bit value that specifies the given aspect ratio.
Definition: ituh263enc.c:87
rl header.
static const uint8_t offset[127][2]
Definition: vf_spp.c:70
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:272
int ff_h263_decode_init(AVCodecContext *avctx)
void ff_h263_encode_motion(MpegEncContext *s, int val, int f_code)
Definition: ituh263enc.c:654
VLC ff_h263_inter_MCBPC_vlc
Definition: ituh263dec.c:94
int ff_h263_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
enum AVPixelFormat ff_h263_hwaccel_pixfmt_list_420[]
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:291
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:228
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:421
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 width
Definition: tests/utils.c:158
unsigned int lambda2
(lambda*lambda) >> FF_LAMBDA_SHIFT
Definition: mpegvideo.h:372
main external API structure.
void ff_h263_encode_mba(MpegEncContext *s)
Definition: ituh263enc.c:828
BYTE int const BYTE int int int height
Definition: avisynth_c.h:713
void ff_h263_encode_gob_header(MpegEncContext *s, int mb_line)
Encode a group of blocks header.
Definition: ituh263enc.c:246
static int h263_get_motion_length(MpegEncContext *s, int val, int f_code)
Definition: h263.h:120
#define INT_BIT
synthesis window for stochastic i
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:137
DSPContext dsp
pointers for accelerated dsp functions
Definition: mpegvideo.h:391
int ff_h263_decode_picture_header(MpegEncContext *s)
Definition: ituh263dec.c:871
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:231
int16_t * ff_h263_pred_motion(MpegEncContext *s, int block, int dir, int *px, int *py)
Definition: h263.c:315
MpegEncContext.
Definition: mpegvideo.h:241
#define MAX_RUN
Definition: rl.h:34
PutBitContext pb
bit output
Definition: mpegvideo.h:314
rational numbers
#define CODEC_FLAG2_NO_OUTPUT
Skip bitstream encoding.
void ff_h263_encode_mb(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
Definition: ituh263enc.c:453
function y
Definition: D.m:1
int ff_h263_decode_end(AVCodecContext *avctx)
void ff_h263_update_motion_val(MpegEncContext *s)
Definition: h263.c:48
int16_t(* block)[64]
points to one of the following blocks
Definition: mpegvideo.h:700
static int get_p_cbp(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
Definition: h263.h:148
static const struct twinvq_data tab
int ff_h263_decode_gob_header(MpegEncContext *s)
int ff_h263_decode_motion(MpegEncContext *s, int pred, int f_code)
Definition: ituh263dec.c:273
void ff_h263_show_pict_info(MpegEncContext *s)
Print picture info if FF_DEBUG_PICT_INFO is set.
Definition: ituh263dec.c:71
AVPixelFormat
Pixel format.
Definition: pixfmt.h:66
This structure stores compressed data.