679
702
int (*dct_quantize)(struct MpegEncContext *s, DCTELEM *block/*align 16*/, int n, int qscale, int *overflow);
680
703
int (*fast_dct_quantize)(struct MpegEncContext *s, DCTELEM *block/*align 16*/, int n, int qscale, int *overflow);
681
704
void (*denoise_dct)(struct MpegEncContext *s, DCTELEM *block);
706
int mpv_flags; ///< flags set by private options
707
int quantizer_noise_shaping;
709
/* error resilience stuff */
710
uint8_t *er_temp_buffer;
712
/* temp buffers for rate control */
713
float *cplx_tab, *bits_tab;
715
/* flag to indicate a reinitialization is required, e.g. after
716
* a frame size change */
682
718
} MpegEncContext;
684
720
#define REBASE_PICTURE(pic, new_ctx, old_ctx) (pic ? \
685
721
(pic >= old_ctx->picture && pic < old_ctx->picture+old_ctx->picture_count ?\
686
&new_ctx->picture[pic - old_ctx->picture] : pic - (Picture*)old_ctx + (Picture*)new_ctx)\
722
&new_ctx->picture[pic - old_ctx->picture] : (Picture*) ((uint8_t*)pic - (uint8_t*)old_ctx + (uint8_t*)new_ctx))\
689
void MPV_decode_defaults(MpegEncContext *s);
690
int MPV_common_init(MpegEncContext *s);
691
void MPV_common_end(MpegEncContext *s);
692
void MPV_decode_mb(MpegEncContext *s, DCTELEM block[12][64]);
693
int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx);
694
void MPV_frame_end(MpegEncContext *s);
695
int MPV_encode_init(AVCodecContext *avctx);
696
int MPV_encode_end(AVCodecContext *avctx);
697
int MPV_encode_picture(AVCodecContext *avctx, unsigned char *buf, int buf_size, void *data);
698
void MPV_common_init_mmx(MpegEncContext *s);
699
void MPV_common_init_axp(MpegEncContext *s);
700
void MPV_common_init_mlib(MpegEncContext *s);
701
void MPV_common_init_mmi(MpegEncContext *s);
702
void MPV_common_init_arm(MpegEncContext *s);
703
void MPV_common_init_altivec(MpegEncContext *s);
704
void MPV_common_init_bfin(MpegEncContext *s);
725
/* mpegvideo_enc common options */
726
#define FF_MPV_FLAG_SKIP_RD 0x0001
727
#define FF_MPV_FLAG_STRICT_GOP 0x0002
728
#define FF_MPV_FLAG_QP_RD 0x0004
729
#define FF_MPV_FLAG_CBP_RD 0x0008
731
#define FF_MPV_OFFSET(x) offsetof(MpegEncContext, x)
732
#define FF_MPV_OPT_FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM)
733
#define FF_MPV_COMMON_OPTS \
734
{ "mpv_flags", "Flags common for all mpegvideo-based encoders.", FF_MPV_OFFSET(mpv_flags), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "mpv_flags" },\
735
{ "skip_rd", "RD optimal MB level residual skipping", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_SKIP_RD }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\
736
{ "strict_gop", "Strictly enforce gop size", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_STRICT_GOP }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\
737
{ "qp_rd", "Use rate distortion optimization for qp selection", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_QP_RD }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\
738
{ "cbp_rd", "use rate distortion optimization for CBP", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_CBP_RD }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\
739
{ "luma_elim_threshold", "single coefficient elimination threshold for luminance (negative values also consider dc coefficient)",\
740
FF_MPV_OFFSET(luma_elim_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\
741
{ "chroma_elim_threshold", "single coefficient elimination threshold for chrominance (negative values also consider dc coefficient)",\
742
FF_MPV_OFFSET(chroma_elim_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\
743
{ "quantizer_noise_shaping", NULL, FF_MPV_OFFSET(quantizer_noise_shaping), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FF_MPV_OPT_FLAGS },
745
extern const AVOption ff_mpv_generic_options[];
747
#define FF_MPV_GENERIC_CLASS(name) \
748
static const AVClass name ## _class = {\
749
.class_name = #name " encoder",\
750
.item_name = av_default_item_name,\
751
.option = ff_mpv_generic_options,\
752
.version = LIBAVUTIL_VERSION_INT,\
756
* Set the given MpegEncContext to common defaults (same for encoding
757
* and decoding). The changed fields will not depend upon the prior
758
* state of the MpegEncContext.
760
void ff_MPV_common_defaults(MpegEncContext *s);
762
void ff_MPV_decode_defaults(MpegEncContext *s);
763
int ff_MPV_common_init(MpegEncContext *s);
764
int ff_mpv_frame_size_alloc(MpegEncContext *s, int linesize);
765
int ff_MPV_common_frame_size_change(MpegEncContext *s);
766
void ff_MPV_common_end(MpegEncContext *s);
767
void ff_MPV_decode_mb(MpegEncContext *s, DCTELEM block[12][64]);
768
int ff_MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx);
769
void ff_MPV_frame_end(MpegEncContext *s);
770
int ff_MPV_encode_init(AVCodecContext *avctx);
771
int ff_MPV_encode_end(AVCodecContext *avctx);
772
int ff_MPV_encode_picture(AVCodecContext *avctx, AVPacket *pkt,
773
const AVFrame *frame, int *got_packet);
774
void ff_MPV_encode_init_x86(MpegEncContext *s);
775
void ff_MPV_common_init_x86(MpegEncContext *s);
776
void ff_MPV_common_init_axp(MpegEncContext *s);
777
void ff_MPV_common_init_arm(MpegEncContext *s);
778
void ff_MPV_common_init_altivec(MpegEncContext *s);
779
void ff_MPV_common_init_bfin(MpegEncContext *s);
705
780
void ff_clean_intra_table_entries(MpegEncContext *s);
706
781
void ff_draw_horiz_band(MpegEncContext *s, int y, int h);
707
782
void ff_mpeg_flush(AVCodecContext *avctx);
724
799
int ff_dct_common_init(MpegEncContext *s);
725
800
void ff_convert_matrix(DSPContext *dsp, int (*qmat)[64], uint16_t (*qmat16)[2][64],
726
801
const uint16_t *quant_matrix, int bias, int qmin, int qmax, int intra);
802
int ff_dct_quantize_c(MpegEncContext *s, DCTELEM *block, int n, int qscale, int *overflow);
728
804
void ff_init_block_index(MpegEncContext *s);
729
805
void ff_copy_picture(Picture *dst, Picture *src);
807
void ff_MPV_motion(MpegEncContext *s,
808
uint8_t *dest_y, uint8_t *dest_cb,
809
uint8_t *dest_cr, int dir,
810
uint8_t **ref_picture,
811
op_pixels_func (*pix_op)[4],
812
qpel_mc_func (*qpix_op)[16]);
732
815
* Allocate a Picture.
733
816
* The pixels are allocated/set by calling get_buffer() if shared = 0.
735
818
int ff_alloc_picture(MpegEncContext *s, Picture *pic, int shared);
737
extern const enum PixelFormat ff_pixfmt_list_420[];
738
extern const enum PixelFormat ff_hwaccel_pixfmt_list_420[];
820
extern const enum AVPixelFormat ff_pixfmt_list_420[];
821
extern const enum AVPixelFormat ff_hwaccel_pixfmt_list_420[];
740
823
static inline void ff_update_block_index(MpegEncContext *s){
741
const int block_size= 8>>s->avctx->lowres;
824
const int block_size = 8;
743
826
s->block_index[0]+=2;
744
827
s->block_index[1]+=2;
817
void rv10_encode_picture_header(MpegEncContext *s, int picture_number);
818
int rv_decode_dc(MpegEncContext *s, int n);
819
void rv20_encode_picture_header(MpegEncContext *s, int picture_number);
900
void ff_rv10_encode_picture_header(MpegEncContext *s, int picture_number);
901
int ff_rv_decode_dc(MpegEncContext *s, int n);
902
void ff_rv20_encode_picture_header(MpegEncContext *s, int picture_number);
823
void msmpeg4_encode_picture_header(MpegEncContext * s, int picture_number);
824
void msmpeg4_encode_ext_header(MpegEncContext * s);
825
void msmpeg4_encode_mb(MpegEncContext * s,
826
DCTELEM block[6][64],
827
int motion_x, int motion_y);
828
int msmpeg4_decode_picture_header(MpegEncContext * s);
829
int msmpeg4_decode_ext_header(MpegEncContext * s, int buf_size);
906
void ff_msmpeg4_encode_picture_header(MpegEncContext * s, int picture_number);
907
void ff_msmpeg4_encode_ext_header(MpegEncContext * s);
908
void ff_msmpeg4_encode_mb(MpegEncContext * s,
909
DCTELEM block[6][64],
910
int motion_x, int motion_y);
911
int ff_msmpeg4_decode_picture_header(MpegEncContext * s);
912
int ff_msmpeg4_decode_ext_header(MpegEncContext * s, int buf_size);
830
913
int ff_msmpeg4_decode_init(AVCodecContext *avctx);
831
914
void ff_msmpeg4_encode_init(MpegEncContext *s);
832
915
int ff_wmv2_decode_picture_header(MpegEncContext * s);