X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fmpegvideo.h;h=10dd48ca1ecf405583854ebb95345e67ead5ce15;hb=e161e007be2ca2df1e560470f94d4038dd841d67;hp=86247c2ce15644c672974ce23acb4bd16a4f1269;hpb=047599a4ba6352b2b5911c10fbec821ef6612d95;p=ffmpeg diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 86247c2ce15..10dd48ca1ec 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -1,6 +1,6 @@ /* * Generic DCT based hybrid video encoder - * Copyright (c) 2000, 2001, 2002 Fabrice Bellard. + * Copyright (c) 2000, 2001, 2002 Fabrice Bellard * Copyright (c) 2002-2004 Michael Niedermayer * * This file is part of FFmpeg. @@ -21,7 +21,7 @@ */ /** - * @file mpegvideo.h + * @file libavcodec/mpegvideo.h * mpegvideo header. */ @@ -120,6 +120,7 @@ typedef struct Picture{ int long_ref; ///< 1->long term reference 0->short term reference int ref_poc[2][2][16]; ///< h264 POCs of the frames used as reference (FIXME need per slice) int ref_count[2][2]; ///< number of entries in ref_poc (FIXME need per slice) + int mbaff; ///< h264 1 -> MBAFF frame 0-> not MBAFF int mb_var_sum; ///< sum of MB variance for current frame int mc_mb_var_sum; ///< motion compensated MB variance for current frame @@ -200,6 +201,7 @@ typedef struct MpegEncContext { int bit_rate; ///< wanted bit rate enum OutputFormat out_format; ///< output format int h263_pred; ///< use mpeg4/h263 ac/dc predictions + int pb_frame; ///< PB frame mode (0 = none, 1 = base, 2 = improved) /* the following codec id fields are deprecated in favor of codec_id */ int h263_plus; ///< h263 plus headers @@ -486,6 +488,7 @@ typedef struct MpegEncContext { /* H.263 specific */ int gob_index; int obmc; ///< overlapped block motion compensation + int showed_packed_warning; ///< flag for having shown the warning about divxs invalid b frames /* H.263+ specific */ int umvplus; ///< == H263+ && unrestricted_mv @@ -516,6 +519,7 @@ typedef struct MpegEncContext { int sprite_brightness_change; int num_sprite_warping_points; int real_sprite_warping_points; + uint16_t sprite_traj[4][2]; ///< sprite trajectory points int sprite_offset[2][2]; ///< sprite offset[isChroma][isMVY] int sprite_delta[2][2]; ///< sprite_delta [isY][isMVY] int sprite_shift[2]; ///< sprite shift [isChroma] @@ -544,6 +548,9 @@ typedef struct MpegEncContext { int mpeg_quant; int t_frame; ///< time distance of first I -> B, used for interlaced b frames int padding_bug_score; ///< used to detect the VERY common padding bug in MPEG4 + int cplx_estimation_trash_i; + int cplx_estimation_trash_p; + int cplx_estimation_trash_b; /* divx specific, used to workaround (many) bugs in divx5 */ int divx_version; @@ -594,7 +601,7 @@ typedef struct MpegEncContext { int broken_link; ///< no_output_of_prior_pics_flag uint8_t *vbv_delay_ptr; ///< pointer to vbv_delay in the bitstream - /* MPEG2 specific - I wish I had not to support this mess. */ + /* MPEG-2-specific - I wished not to have to support this mess. */ int progressive_sequence; int mpeg_f_code[2][2]; int picture_structure; @@ -629,8 +636,8 @@ typedef struct MpegEncContext { int rtp_mode; uint8_t *ptr_lastgob; - int swap_uv;//vcr2 codec is mpeg2 varint with UV swaped - short * pblocks[12]; + int swap_uv; //vcr2 codec is an MPEG-2 variant with U and V swapped + DCTELEM (*pblocks[12])[64]; DCTELEM (*block)[64]; ///< points to one of the following blocks DCTELEM (*blocks)[8][64]; // for HQ mode we need to keep the best block @@ -679,7 +686,7 @@ void MPV_common_init_mmx(MpegEncContext *s); void MPV_common_init_axp(MpegEncContext *s); void MPV_common_init_mlib(MpegEncContext *s); void MPV_common_init_mmi(MpegEncContext *s); -void MPV_common_init_armv4l(MpegEncContext *s); +void MPV_common_init_arm(MpegEncContext *s); void MPV_common_init_altivec(MpegEncContext *s); void ff_clean_intra_table_entries(MpegEncContext *s); void ff_draw_horiz_band(MpegEncContext *s, int y, int h); @@ -700,6 +707,10 @@ void ff_convert_matrix(DSPContext *dsp, int (*qmat)[64], uint16_t (*qmat16)[2][6 const uint16_t *quant_matrix, int bias, int qmin, int qmax, int intra); void ff_init_block_index(MpegEncContext *s); +void ff_copy_picture(Picture *dst, Picture *src); + +extern const enum PixelFormat ff_pixfmt_list_420[]; +extern const enum PixelFormat ff_hwaccel_pixfmt_list_420[]; static inline void ff_update_block_index(MpegEncContext *s){ const int block_size= 8>>s->avctx->lowres; @@ -759,7 +770,7 @@ void mpeg1_encode_mb(MpegEncContext *s, void ff_mpeg1_encode_init(MpegEncContext *s); void ff_mpeg1_encode_slice_header(MpegEncContext *s); void ff_mpeg1_clean_buffers(MpegEncContext *s); -int ff_mpeg1_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size); +int ff_mpeg1_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size, AVCodecParserContext *s); extern const uint8_t ff_mpeg4_y_dc_scale_table[32]; extern const uint8_t ff_mpeg4_c_dc_scale_table[32]; @@ -784,7 +795,7 @@ int ff_h261_get_picture_format(int width, int height); int ff_h263_decode_init(AVCodecContext *avctx); int ff_h263_decode_frame(AVCodecContext *avctx, void *data, int *data_size, - const uint8_t *buf, int buf_size); + AVPacket *avpkt); int ff_h263_decode_end(AVCodecContext *avctx); void h263_encode_mb(MpegEncContext *s, DCTELEM block[6][64], @@ -829,6 +840,7 @@ void ff_clean_h263_qscales(MpegEncContext *s); int ff_mpeg4_decode_partitions(MpegEncContext *s); int ff_mpeg4_get_video_packet_prefix_length(MpegEncContext *s); int ff_h263_resync(MpegEncContext *s); +const uint8_t *ff_h263_find_resync_marker(const uint8_t *p, const uint8_t *end); int ff_h263_get_gob_height(MpegEncContext *s); void ff_mpeg4_init_direct_mv(MpegEncContext *s); int ff_mpeg4_set_direct_mv(MpegEncContext *s, int mx, int my);