30 #define UNCHECKED_BITSTREAM_READER 1
55 #define H263_MBTYPE_B_VLC_BITS 6
56 #define CBPC_B_VLC_BITS 3
110 static volatile int done = 0;
143 for (i = 0; i < 6; i++)
159 unsigned int val, gob_number;
170 left =
FFMIN(left, 32);
172 for(;left>13; left--){
235 for(;left>16+1+5+5; left-=8){
269 val = (val - 1) << shift;
282 if (pred < -31 && val < -63)
284 if (pred > 32 && val > 63)
314 code = (sign) ? (pred - code) : (pred + code);
326 int cbpc, i, pred_x, pred_y, mx, my;
343 mot_val[0 ]= mot_val[2 ]=
345 mot_val[1 ]= mot_val[3 ]=
366 if ((cbpc & 16) == 0) {
380 mot_val[0 ]= mot_val[2 ]=
382 mot_val[1 ]= mot_val[3 ]=
397 if (s->
umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
416 static const int8_t quant_tab[4] = { -1, -2, 1, 2 };
451 component = (n <= 3 ? 0 : n - 4 + 1);
458 level = level & 0xff;
470 if((level&0x7F) == 0){
503 if (CONFIG_FLV_DECODER && s->
h263_flv > 1) {
545 i = i - run + ((run-1)&63) + 1;
548 block[scan_table[i]] =
level;
587 for (i = 0; i < 6; i++) {
603 if (pb_frame == 2 && c)
615 #define tab_size ((signed)FF_ARRAY_ELEMS(s->direct_scale_mv[0]))
616 #define tab_bias (tab_size / 2)
629 s->
mv[0][i][0] = p_mx * time_pb / time_pp;
630 s->
mv[1][i][0] = p_mx * (time_pb - time_pp) / time_pp;
637 s->
mv[0][i][1] = p_my * time_pb / time_pp;
638 s->
mv[1][i][1] = p_my * (time_pb - time_pp) / time_pp;
649 int colocated_mb_type = p->
mb_type[mb_index];
654 colocated_mb_type = p->
mb_type[mb_index];
657 if (
IS_8X8(colocated_mb_type)) {
659 for (i = 0; i < 4; i++)
666 s->
mv[0][3][0] = s->
mv[0][0][0];
669 s->
mv[0][3][1] = s->
mv[0][0][1];
672 s->
mv[1][3][0] = s->
mv[1][0][0];
675 s->
mv[1][3][1] = s->
mv[1][0][1];
683 int16_t
block[6][64])
685 int cbpc, cbpy, i, cbp, pred_x, pred_y, mx, my, dquant;
688 int cbpb = 0, pb_mv_count = 0;
732 cbp = (cbpc & 3) | (cbpy << 2);
738 if ((cbpc & 16) == 0) {
761 if (s->
umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
783 if (s->
umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
797 mot_val0[0 ]= mot_val0[2 ]= mot_val0[0+2*
stride]= mot_val0[2+2*
stride]=
798 mot_val0[1 ]= mot_val0[3 ]= mot_val0[1+2*
stride]= mot_val0[3+2*
stride]=
799 mot_val1[0 ]= mot_val1[2 ]= mot_val1[0+2*
stride]= mot_val1[2+2*
stride]=
800 mot_val1[1 ]= mot_val1[3 ]= mot_val1[1+2*
stride]= mot_val1[3+2*
stride]= 0;
831 cbp = (cbpc & 3) | (cbpy << 2);
867 if (s->
umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
872 mot_val[0 ]= mot_val[2 ]= mot_val[0+2*
stride]= mot_val[2+2*
stride]= mx;
873 mot_val[1 ]= mot_val[3 ]= mot_val[1+2*
stride]= mot_val[3+2*
stride]= my;
894 if (s->
umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
899 mot_val[0 ]= mot_val[2 ]= mot_val[0+2*
stride]= mot_val[2+2*
stride]= mx;
900 mot_val[1 ]= mot_val[3 ]= mot_val[1+2*
stride]= mot_val[3+2*
stride]= my;
937 cbp = (cbpc & 3) | (cbpy << 2);
945 while(pb_mv_count--){
951 for (i = 0; i < 6; i++) {
998 startcode = ((startcode << 8) |
get_bits(&s->
gb, 8)) & 0x003FFFFF;
1000 if(startcode == 0x20)
1004 if (startcode != 0x20) {
1035 if (format != 7 && format != 6) {
1101 }
else if (ufep != 0) {
1139 ff_dlog(s->
avctx,
"\nH.263+ Custom picture: %dx%d\n",width,height);
1153 if ((width == 0) || (height == 0))
1266 for(i=0; i<13; i++){
av_cold void ff_h263_decode_init_vlc(void)
int rv10_first_dc_coded[3]
const char const char void * val
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
ScanTable intra_v_scantable
static int h263_decode_gob_header(MpegEncContext *s)
Decode the group of blocks header or slice header.
static int shift(int a, int b)
VLC ff_h263_inter_MCBPC_vlc
const uint8_t * y_dc_scale_table
qscale -> y_dc_scale table
const uint16_t ff_mba_max[6]
void(* clear_block)(int16_t *block)
static void set_one_direct_mv(MpegEncContext *s, Picture *p, int i)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define INIT_VLC_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size)
#define SKIP_COUNTER(name, gb, num)
static int check_marker(void *logctx, GetBitContext *s, const char *msg)
#define AV_EF_COMPLIANT
consider all spec non compliances as errors
void(* clear_blocks)(int16_t *blocks)
int obmc
overlapped block motion compensation
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel...
static int h263_decode_block(MpegEncContext *s, int16_t *block, int n, int coded)
#define AV_EF_BITSTREAM
detect bitstream specification deviations
const uint16_t ff_h263_format[8][2]
#define FF_ASPECT_EXTENDED
int mb_num
number of MBs of a picture
static int get_sbits(GetBitContext *s, int n)
int h263_aic
Advanced INTRA Coding (AIC)
int16_t * ff_h263_pred_motion(MpegEncContext *s, int block, int dir, int *px, int *py)
Macro definitions for various function/variable attributes.
#define USES_LIST(a, list)
int alt_inter_vlc
alternative inter vlc
int mb_num_left
number of MBs left in this video packet (for partitioned Slices only)
int64_t time
time of current frame
void void avpriv_request_sample(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
const uint8_t ff_mpeg1_dc_scale_table[128]
#define MV_DIRECT
bidirectional mode where the difference equals the MV of the last P/S/I-Frame (MPEG-4) ...
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
#define FF_DEBUG_PICT_INFO
static av_cold int end(AVCodecContext *avctx)
static VLC h263_mbtype_b_vlc
int ff_rv_decode_dc(MpegEncContext *s, int n)
int no_rounding
apply no rounding to motion compensation (MPEG-4, msmpeg4, ...) for B-frames rounding mode is always ...
Picture current_picture
copy of the current picture structure.
GetBitContext last_resync_gb
used to search for the next resync marker
static int get_bits_count(const GetBitContext *s)
char av_get_picture_type_char(enum AVPictureType pict_type)
Return a single letter to describe the given picture type pict_type.
const uint8_t ff_h263_intra_MCBPC_bits[9]
uint16_t pp_time
time distance between the last 2 p,s,i frames
const uint8_t ff_mba_length[7]
int mb_height
number of MBs horizontally & vertically
int lowres
low resolution decoding, 1-> 1/2 size, 2->1/4 size
static int h263_skip_b_part(MpegEncContext *s, int cbp)
int codec_tag
internal codec_tag upper case converted from avctx codec_tag
void ff_set_qscale(MpegEncContext *s, int qscale)
set qscale and update qscale dependent variables.
const uint8_t ff_h263_mbtype_b_tab[15][2]
static int get_bits_left(GetBitContext *gb)
#define H263_MBTYPE_B_VLC_BITS
int h263_plus
H.263+ headers.
uint8_t ff_h263_static_rl_table_store[2][2][2 *MAX_RUN+MAX_LEVEL+3]
#define UPDATE_CACHE(name, gb)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
int last_dc[3]
last DC values for MPEG-1
const uint8_t ff_h263_inter_MCBPC_code[28]
int16_t direct_scale_mv[2][64]
precomputed to avoid divisions in ff_mpeg4_set_direct_mv
int mb_skipped
MUST BE SET only during DECODING.
const uint8_t ff_modified_quant_tab[2][32]
int unrestricted_mv
mv can point outside of the coded picture
int ff_h263_decode_motion(MpegEncContext *s, int pred, int f_code)
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
static const int h263_mb_type_b_map[15]
int h263_slice_structured
#define INTER_MCBPC_VLC_BITS
int64_t av_gcd(int64_t a, int64_t b)
Compute the greatest common divisor of two integer operands.
void ff_mpeg4_init_direct_mv(MpegEncContext *s)
int ff_mpeg4_decode_video_packet_header(Mpeg4DecContext *ctx)
Decode the next video packet.
int low_delay
no reordering needed / has no B-frames
static int h263_get_modb(GetBitContext *gb, int pb_frame, int *cbpb)
#define CLOSE_READER(name, gb)
#define INIT_VLC_RL(rl, static_size)
#define GET_RL_VLC(level, run, name, gb, table, bits,max_depth, need_update)
common internal API header
int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx)
Check if the given dimension of an image is valid, meaning that all bytes of the image can be address...
const uint8_t ff_h263_inter_MCBPC_bits[28]
enum AVPictureType pict_type
Picture type of the frame.
const uint8_t ff_h263_chroma_qscale_table[32]
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
int umvplus
== H.263+ && unrestricted_mv
int16_t(*[2] motion_val)[2]
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
int block_last_index[12]
last non zero coefficient in block
int pb_frame
PB-frame mode (0 = none, 1 = base, 2 = improved)
int ff_h263_decode_mba(MpegEncContext *s)
RL_VLC_ELEM * rl_vlc[32]
decoding only
#define SHOW_UBITS(name, gb, num)
static int h263p_decode_umotion(MpegEncContext *s, int pred)
int block_index[6]
index to current MB in block based arrays with edges
static const float pred[4]
static const int8_t mv[256][2]
#define MV_TYPE_16X16
1 vector for the whole mb
const uint8_t ff_aic_dc_scale_table[32]
Libavcodec external API header.
int h263_flv
use flv H.263 header
const uint8_t ff_h263_intra_MCBPC_code[9]
static int set_direct_mv(MpegEncContext *s)
ScanTable intra_scantable
int height
picture size. must be a multiple of 16
#define OPEN_READER(name, gb)
av_cold int ff_rl_init(RLTable *rl, uint8_t static_store[2][2 *MAX_RUN+MAX_LEVEL+3])
#define SLICE_END
end marker found
VLC ff_h263_intra_MCBPC_vlc
static unsigned int get_bits1(GetBitContext *s)
static void skip_bits1(GetBitContext *s)
static const char * format
ScanTable intra_h_scantable
static void skip_bits(GetBitContext *s, int n)
Rational number (pair of numerator and denominator).
int ff_h263_resync(MpegEncContext *s)
Decode the group of blocks / video packet header.
#define SKIP_CACHE(name, gb, num)
const uint8_t ff_cbpc_b_tab[4][2]
int f_code
forward MV resolution
const uint8_t ff_h263_cbpy_tab[16][2]
int ff_h263_decode_picture_header(MpegEncContext *s)
int pict_type
AV_PICTURE_TYPE_I, AV_PICTURE_TYPE_P, AV_PICTURE_TYPE_B, ...
static av_const int sign_extend(int val, unsigned bits)
static void h263_decode_dquant(MpegEncContext *s)
int h263_pred
use MPEG-4/H.263 ac/dc predictions
const AVRational ff_h263_pixel_aspect[16]
const uint8_t * c_dc_scale_table
qscale -> c_dc_scale table
int mv[2][4][2]
motion vectors for a macroblock first coordinate : 0 = forward 1 = backward second " : depend...
int b8_stride
2*mb_width+1 used for some 8x8 block arrays to allow simple addressing
#define LOCAL_ALIGNED_32(t, v,...)
struct AVCodecContext * avctx
#define SHOW_SBITS(name, gb, num)
GLint GLenum GLboolean GLsizei stride
common internal api header.
int mb_stride
mb_width+1 used for some arrays to allow simple addressing of left & top MBs without sig11 ...
void ff_h263_pred_acdc(MpegEncContext *s, int16_t *block, int n)
static int get_unary(GetBitContext *gb, int stop, int len)
Get unary code of limited length.
Picture last_picture
copy of the previous picture structure.
const uint8_t * chroma_qscale_table
qscale -> chroma_qscale (H.263)
static av_always_inline int diff(const uint32_t a, const uint32_t b)
void ff_h263_show_pict_info(MpegEncContext *s)
Print picture info if FF_DEBUG_PICT_INFO is set.
int16_t(* block)[64]
points to one of the following blocks
VLC_TYPE(* table)[2]
code, bits
Picture next_picture
copy of the next picture structure.
static const uint8_t * align_get_bits(GetBitContext *s)
int chroma_qscale
chroma QP
int frame_number
Frame counter, set by libavcodec.
static void preview_obmc(MpegEncContext *s)
read the next MVs for OBMC.
uint32_t * mb_type
types and macros are defined in mpegutils.h
int rv10_version
RV10 version: 0 or 3.
static int skip_1stop_8data_bits(GetBitContext *gb)
int h263_long_vectors
use horrible H.263v1 long vector mode
#define MV_TYPE_8X8
4 vectors (H.263, MPEG-4 4MV)
int h263_aic_dir
AIC direction: 0 = left, 1 = top.
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
int ff_h263_decode_mb(MpegEncContext *s, int16_t block[6][64])
#define INTRA_MCBPC_VLC_BITS
uint16_t pb_time
time distance between the last b and p,s,i frame
const uint8_t ff_mvtab[33][2]