30 #define UNCHECKED_BITSTREAM_READER 1
52 #define H263_MBTYPE_B_VLC_BITS 6
53 #define CBPC_B_VLC_BITS 3
107 static volatile int done = 0;
156 unsigned int val, gob_number;
168 for(;left>13; left--){
231 for(;left>16+1+5+5; left-=8){
265 val = (val - 1) << shift;
278 if (pred < -31 && val < -63)
280 if (pred > 32 && val > 63)
306 code = (sign) ? (pred - code) : (pred + code);
318 int cbpc, i, pred_x, pred_y, mx, my;
335 mot_val[0 ]= mot_val[2 ]=
337 mot_val[1 ]= mot_val[3 ]=
358 if ((cbpc & 16) == 0) {
372 mot_val[0 ]= mot_val[2 ]=
374 mot_val[1 ]= mot_val[3 ]=
389 if (s->
umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
408 static const int8_t quant_tab[4] = { -1, -2, 1, 2 };
443 component = (n <= 3 ? 0 : n - 4 + 1);
450 level = level & 0xff;
462 if((level&0x7F) == 0){
495 if (CONFIG_FLV_DECODER && s->
h263_flv > 1) {
537 i = i - run + ((run-1)&63) + 1;
540 block[scan_table[i]] =
level;
579 for (i = 0; i < 6; i++) {
595 if (pb_frame == 2 && c)
608 int16_t
block[6][64])
610 int cbpc, cbpy, i, cbp, pred_x, pred_y, mx, my, dquant;
613 int cbpb = 0, pb_mv_count = 0;
652 cbp = (cbpc & 3) | (cbpy << 2);
658 if ((cbpc & 16) == 0) {
681 if (s->
umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
703 if (s->
umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
717 mot_val0[0 ]= mot_val0[2 ]= mot_val0[0+2*
stride]= mot_val0[2+2*
stride]=
718 mot_val0[1 ]= mot_val0[3 ]= mot_val0[1+2*
stride]= mot_val0[3+2*
stride]=
719 mot_val1[0 ]= mot_val1[2 ]= mot_val1[0+2*
stride]= mot_val1[2+2*
stride]=
720 mot_val1[1 ]= mot_val1[3 ]= mot_val1[1+2*
stride]= mot_val1[3+2*
stride]= 0;
751 cbp = (cbpc & 3) | (cbpy << 2);
778 mot_val[0 ]= mot_val[2 ]= mot_val[0+2*
stride]= mot_val[2+2*
stride]= mx;
779 mot_val[1 ]= mot_val[3 ]= mot_val[1+2*
stride]= mot_val[3+2*
stride]= my;
791 mot_val[0 ]= mot_val[2 ]= mot_val[0+2*
stride]= mot_val[2+2*
stride]= mx;
792 mot_val[1 ]= mot_val[3 ]= mot_val[1+2*
stride]= mot_val[3+2*
stride]= my;
829 cbp = (cbpc & 3) | (cbpy << 2);
837 while(pb_mv_count--){
843 for (i = 0; i < 6; i++) {
887 startcode = ((startcode << 8) |
get_bits(&s->
gb, 8)) & 0x003FFFFF;
889 if(startcode == 0x20)
893 if (startcode != 0x20) {
923 if (format != 7 && format != 6) {
989 }
else if (ufep != 0) {
1027 ff_dlog(s->
avctx,
"\nH.263+ Custom picture: %dx%d\n",width,height);
1041 if ((width == 0) || (height == 0))
1146 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
const uint8_t ff_cbpc_b_tab[4][2]
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
void(* clear_block)(int16_t *block)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
#define AV_LOG_WARNING
Something somehow does not look correct.
const uint8_t ff_h263_intra_MCBPC_code[9]
#define SKIP_COUNTER(name, gb, num)
const uint8_t ff_h263_cbpy_tab[16][2]
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)
const uint16_t ff_h263_format[8][2]
int mb_num
number of MBs of a picture
const uint8_t ff_modified_quant_tab[2][32]
static int get_sbits(GetBitContext *s, int n)
int h263_aic
Advanded 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
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 (mpeg4) ...
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
#define INIT_VLC_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size)
const uint8_t ff_h263_intra_MCBPC_bits[9]
const uint8_t ff_mvtab[33][2]
static av_cold int end(AVCodecContext *avctx)
static VLC h263_mbtype_b_vlc
int no_rounding
apply no rounding to motion compensation (MPEG4, msmpeg4, ...) for b-frames rounding mode is always 0...
const uint8_t ff_h263_inter_MCBPC_bits[28]
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.
uint16_t pp_time
time distance between the last 2 p,s,i frames
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
const AVRational ff_h263_pixel_aspect[16]
void ff_set_qscale(MpegEncContext *s, int qscale)
set qscale and update qscale dependent variables.
const uint8_t ff_mba_length[7]
static int get_bits_left(GetBitContext *gb)
#define H263_MBTYPE_B_VLC_BITS
int h263_plus
h263 plus headers
#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 MPEG1
int mb_skipped
MUST BE SET only during DECODING.
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)
Return the greatest common divisor of a and b.
void ff_mpeg4_init_direct_mv(MpegEncContext *s)
int ff_mpeg4_decode_video_packet_header(Mpeg4DecContext *ctx)
Decode the next video packet.
static int h263_get_modb(GetBitContext *gb, int pb_frame, int *cbpb)
#define CLOSE_READER(name, gb)
#define INIT_VLC_RL(rl, static_size)
Libavcodec external API header.
static int check_marker(GetBitContext *s, const char *msg)
common internal API header
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
int umvplus
== H263+ && unrestricted_mv
int16_t(*[2] motion_val)[2]
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
const uint16_t ff_mba_max[6]
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)
const uint8_t ff_aic_dc_scale_table[32]
int ff_h263_decode_mba(MpegEncContext *s)
const uint8_t ff_h263_inter_MCBPC_code[28]
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
int h263_flv
use flv h263 header
uint8_t ff_h263_static_rl_table_store[2][2][2 *MAX_RUN+MAX_LEVEL+3]
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)
BYTE int const BYTE int int int height
static void skip_bits1(GetBitContext *s)
ScanTable intra_h_scantable
static void skip_bits(GetBitContext *s, int n)
rational number numerator/denominator
int ff_h263_resync(MpegEncContext *s)
Decode the group of blocks / video packet header.
#define SKIP_CACHE(name, gb, num)
int f_code
forward MV resolution
int ff_mpeg4_set_direct_mv(MpegEncContext *s, int mx, int my)
int ff_h263_decode_picture_header(MpegEncContext *s)
int pict_type
AV_PICTURE_TYPE_I, AV_PICTURE_TYPE_P, AV_PICTURE_TYPE_B, ...
const uint8_t ff_h263_mbtype_b_tab[15][2]
static av_const int sign_extend(int val, unsigned bits)
static void h263_decode_dquant(MpegEncContext *s)
int h263_pred
use mpeg4/h263 ac/dc predictions
const uint8_t * c_dc_scale_table
qscale -> c_dc_scale table
#define FF_ASPECT_EXTENDED
#define FF_DEBUG_PICT_INFO
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
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)
const uint8_t ff_h263_chroma_qscale_table[32]
static int get_unary(GetBitContext *gb, int stop, int len)
Get unary code of limited length.
int ff_rv_decode_dc(MpegEncContext *s, int n)
#define AV_EF_BITSTREAM
detect bitstream specification deviations
const uint8_t * chroma_qscale_table
qscale -> chroma_qscale (h263)
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
#define AV_EF_COMPLIANT
consider all spec non compliances as errors
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
#define LOCAL_ALIGNED_16(t, v,...)
int rv10_version
RV10 version: 0 or 3.
static int skip_1stop_8data_bits(GetBitContext *gb)
int h263_long_vectors
use horrible h263v1 long vector mode
#define MV_TYPE_8X8
4 vectors (h263, mpeg4 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