Go to the documentation of this file.
30 #include "config_components.h"
71 #define UNI_MPEG4_ENC_INDEX(last,run,level) ((last)*128*64 + (run)*128 + (level))
74 1, 2, 3, 5, 4, 10, 9, 8,
75 11, 15, 17, 16, 23, 22, 21, 20,
76 19, 18, 25, 24, 27, 26, 11, 7,
77 6, 1, 2, 13, 2, 2, 2, 2,
78 6, 12, 3, 9, 1, 3, 4, 3,
79 7, 4, 1, 1, 5, 5, 14, 6,
80 1, 7, 1, 8, 1, 1, 1, 1,
81 10, 1, 1, 5, 9, 17, 25, 24,
82 29, 33, 32, 41, 2, 23, 28, 31,
83 3, 22, 30, 4, 27, 40, 8, 26,
84 6, 39, 7, 38, 16, 37, 15, 10,
85 11, 12, 13, 14, 1, 21, 20, 18,
110 int format, coded_frame_rate, coded_frame_rate_base,
i, temp_ref;
111 int best_clock_code=1;
113 int best_error= INT_MAX;
119 div= (
s->avctx->time_base.num*1800000LL + 500LL*
s->avctx->time_base.den) / ((1000LL+
i)*
s->avctx->time_base.den);
121 error=
FFABS(
s->avctx->time_base.num*1800000LL - (1000LL+
i)*
s->avctx->time_base.den*div);
122 if(
error < best_error){
129 custom_pcf = best_clock_code != 1 || best_divisor != 60;
130 coded_frame_rate= 1800000;
131 coded_frame_rate_base= (1000+best_clock_code)*best_divisor;
138 temp_ref=
s->picture_number * (
int64_t)coded_frame_rate *
s->avctx->time_base.num /
139 (coded_frame_rate_base * (
int64_t)
s->avctx->time_base.den);
208 put_bits(&
s->pb, 8,
s->avctx->sample_aspect_ratio.num);
209 put_bits(&
s->pb, 8,
s->avctx->sample_aspect_ratio.den);
225 if(
s->h263_slice_structured)
233 if(
s->h263_slice_structured){
250 if(
s->h263_slice_structured){
261 int gob_number= mb_line /
s->gob_index;
274 int8_t *
const qscale_table =
s->current_picture.qscale_table;
278 for(
i=1;
i<
s->mb_num;
i++){
279 if(qscale_table[
s->mb_index2xy[
i] ] - qscale_table[
s->mb_index2xy[
i-1] ] >2)
280 qscale_table[
s->mb_index2xy[
i] ]= qscale_table[
s->mb_index2xy[
i-1] ]+2;
282 for(
i=
s->mb_num-2;
i>=0;
i--){
283 if(qscale_table[
s->mb_index2xy[
i] ] - qscale_table[
s->mb_index2xy[
i+1] ] >2)
284 qscale_table[
s->mb_index2xy[
i] ]= qscale_table[
s->mb_index2xy[
i+1] ]+2;
288 for(
i=1;
i<
s->mb_num;
i++){
289 int mb_xy=
s->mb_index2xy[
i];
307 int level,
run, last,
i, j, last_index, last_non_zero, sign, slevel,
code;
311 if (
s->mb_intra && !
s->h263_aic) {
320 else if (
level < 1) {
331 if (
s->h263_aic &&
s->mb_intra)
334 if(
s->alt_inter_vlc && !
s->mb_intra){
336 int inter_vlc_bits=0;
340 last_index =
s->block_last_index[n];
341 last_non_zero =
i - 1;
342 for (;
i <= last_index;
i++) {
343 j =
s->intra_scantable.permutated[
i];
346 run =
i - last_non_zero - 1;
347 last = (
i == last_index);
357 inter_vlc_bits += 1+6+8-1;
360 aic_vlc_bits += 1+6+8-1;
361 wrong_pos +=
run + 1;
368 if(aic_vlc_bits < inter_vlc_bits && wrong_pos > 63)
374 last_index =
s->block_last_index[n];
375 last_non_zero =
i - 1;
376 for (;
i <= last_index;
i++) {
377 j =
s->intra_scantable.permutated[
i];
380 run =
i - last_non_zero - 1;
381 last = (
i == last_index);
391 if(!CONFIG_FLV_ENCODER ||
s->h263_flv <= 1){
433 sval = ((
val < 0) ? (
short)(-
val):(
short)
val);
436 while (temp_val != 0) {
437 temp_val = temp_val >> 1;
443 tcode = (sval & (1 << (
i-1))) >> (
i-1);
444 tcode = (tcode << 1) | 1;
460 x = 2 *
s->mb_x + (n & 1);
461 y = 2 *
s->mb_y + ((n & 2) >> 1);
463 dc_val =
s->dc_val[0];
468 dc_val =
s->dc_val[n - 4 + 1];
473 a = dc_val[(x - 1) + (y) *
wrap];
474 c = dc_val[(x) + (y - 1) *
wrap];
477 if (
s->first_slice_line && n != 3) {
478 if (n != 2)
c = 1024;
479 if (n != 1 &&
s->mb_x ==
s->resync_mb_x)
a = 1024;
482 if (
a != 1024 &&
c != 1024)
490 *dc_val_ptr = &dc_val[x + y *
wrap];
495 int16_t
block[6][64],
496 int motion_x,
int motion_y)
498 int cbpc, cbpy,
i, cbp, pred_x, pred_y;
500 int16_t rec_intradc[6];
508 if ((cbp | motion_x | motion_y |
s->dquant | (
s->mv_type -
MV_TYPE_16X16)) == 0) {
511 if(interleaved_stats){
523 if(
s->alt_inter_vlc==0 || cbpc!=3)
525 if(
s->dquant) cbpc+= 8;
535 if(interleaved_stats){
544 motion_y - pred_y, 1);
549 if (((motion_x - pred_x) == 1) && ((motion_y - pred_y) == 1))
561 if(interleaved_stats){
569 motion_x =
s->current_picture.motion_val[0][
s->block_index[
i]][0];
570 motion_y =
s->current_picture.motion_val[0][
s->block_index[
i]][1];
573 motion_y - pred_y, 1);
578 if (((motion_x - pred_x) == 1) && ((motion_y - pred_y) == 1))
585 if(interleaved_stats){
599 else scale=
s->c_dc_scale;
609 if(!
s->modified_quant){
612 else if (
level > 127)
624 if (rec_intradc[
i] < 0)
626 else if (rec_intradc[
i] > 2047)
627 rec_intradc[
i] = 2047;
630 *dc_ptr[
i] = rec_intradc[
i];
632 if (
s->block_last_index[
i] > 0 ||
633 (
s->block_last_index[
i] == 0 &&
level !=0))
639 if (
s->block_last_index[
i] >= 1)
646 if(
s->dquant) cbpc+=4;
651 if(
s->dquant) cbpc+=8;
666 if(interleaved_stats){
676 if (
s->h263_aic &&
s->mb_intra) {
682 if(interleaved_stats){
701 bit_size = f_code - 1;
702 range = 1 << bit_size;
725 for(f_code=1; f_code<=
MAX_FCODE; f_code++){
733 bit_size = f_code - 1;
751 for(f_code=
MAX_FCODE; f_code>0; f_code--){
752 for(
mv=-(16<<f_code);
mv<(16<<f_code);
mv++){
764 int slevel,
run, last;
769 for(slevel=-64; slevel<64; slevel++){
770 if(slevel==0)
continue;
772 for(last=0; last<=1; last++){
774 int level= slevel < 0 ? -slevel : slevel;
775 int sign= slevel < 0 ? 1 : 0;
828 s->ac_esc_length= 7+1+6+8;
838 if(
s->modified_quant){
839 s->min_qcoeff= -2047;
848 if (
s->h263_flv > 1) {
849 s->min_qcoeff= -1023;
868 if (
s->lmin >
s->lmax) {
883 mb_pos=
s->mb_x +
s->mb_width*
s->mb_y;
887 #define OFFSET(x) offsetof(MpegEncContext, x)
888 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
891 {
"mb_info",
"emit macroblock info for RFC 2190 packetization, the parameter value is the maximum payload size",
OFFSET(
mb_info),
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX,
VE },
923 {
"structured_slices",
"Write slice start position at every GOB header instead of just GOB number.",
OFFSET(h263_slice_structured),
AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1,
VE},
static void error(const char *err)
#define MV_TYPE_16X16
1 vector for the whole mb
#define AV_LOG_WARNING
Something somehow does not look correct.
AVPixelFormat
Pixel format.
#define FF_ASPECT_EXTENDED
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
static int get_bits_diff(MpegEncContext *s)
static const uint8_t wrong_run[102]
static uint8_t fcode_tab[MAX_MV *2+1]
Minimal fcode that a motion vector component would need.
static void align_put_bits(PutBitContext *s)
Pad the bitstream with zeros up to the next byte boundary.
static uint8_t uni_h263_inter_rl_len[64 *64 *2 *2]
#define UNI_MPEG4_ENC_INDEX(last, run, level)
static const AVOption h263p_options[]
static const int8_t mv[256][2]
static void put_sbits(PutBitContext *pb, int n, int32_t value)
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
static av_cold void init_uni_h263_rl_tab(const RLTable *rl, uint8_t *len_tab)
#define CANDIDATE_MB_TYPE_INTER
static int h263_pred_dc(MpegEncContext *s, int n, int16_t **dc_val_ptr)
#define FF_MPV_COMMON_MOTION_EST_OPTS
int ff_mpv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pic_arg, int *got_packet)
#define FF_MPV_COMMON_OPTS
AVCodec p
The public AVCodec.
static const AVClass h263p_class
int ff_match_2uint16(const uint16_t(*tab)[2], int size, int a, int b)
Return the index into tab at which {a,b} match elements {[0],[1]} of tab.
int16_t * ff_h263_pred_motion(MpegEncContext *s, int block, int dir, int *px, int *py)
const AVRational ff_h263_pixel_aspect[16]
static uint8_t mv_penalty[MAX_FCODE+1][MAX_DMV *2+1]
Table of number of bits a motion vector component needs.
static double val(void *priv, double ch)
static void ff_h263_encode_motion_vector(MpegEncContext *s, int x, int y, int f_code)
av_const int ff_h263_aspect_to_info(AVRational aspect)
Return the 4 bit value that specifies the given aspect ratio.
#define FF_CODEC_ENCODE_CB(func)
#define CANDIDATE_MB_TYPE_INTER4V
static void h263_encode_block(MpegEncContext *s, int16_t *block, int n)
Encode an 8x8 block.
int n
number of entries of table_vlc minus 1
static int ff_thread_once(char *control, void(*routine)(void))
void ff_h263_encode_motion(PutBitContext *pb, int val, int f_code)
#define FF_ARRAY_ELEMS(a)
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample format(the sample packing is implied by the sample format) and sample rate. The lists are not just lists
static int get_rl_index(const RLTable *rl, int last, int run, int level)
static int get_p_cbp(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
#define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE
This encoder can reorder user opaque values from input AVFrames and return them with corresponding ou...
static const uint8_t *const ff_mpeg1_dc_scale_table
#define av_assert0(cond)
assert() equivalent, that is always enabled.
const FFCodec ff_h263p_encoder
av_cold void ff_h263_encode_init(MpegEncContext *s)
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
av_cold void ff_rl_init(RLTable *rl, uint8_t static_store[2][2 *MAX_RUN+MAX_LEVEL+3])
Initialize index_run, max_level and max_run from n, last, table_vlc, table_run and table_level.
#define CODEC_LONG_NAME(str)
void ff_h263_encode_mb(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
#define LIBAVUTIL_VERSION_INT
Describe the class of an AVClass context structure.
static av_cold void init_mv_penalty_and_fcode(void)
const uint16_t(* table_vlc)[2]
const FFCodec ff_h263_encoder
Rational number (pair of numerator and denominator).
static uint8_t uni_h263_intra_aic_rl_len[64 *64 *2 *2]
const char * av_default_item_name(void *ptr)
Return the context name.
@ AV_PICTURE_TYPE_I
Intra.
const uint16_t ff_mba_max[6]
av_cold int ff_mpv_encode_end(AVCodecContext *avctx)
void ff_init_qscale_tab(MpegEncContext *s)
init s->current_picture.qscale_table from s->lambda_table
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
void ff_clean_h263_qscales(MpegEncContext *s)
modify qscale so that encoding is actually possible in H.263 (limit difference to -2....
int(* init)(AVBSFContext *ctx)
static void scale(int *out, const int *in, const int w, const int h, const int shift)
const uint8_t ff_h263_cbpy_tab[16][2]
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
const uint8_t ff_h263_inter_MCBPC_bits[28]
static const AVOption h263_options[]
void ff_h263_encode_picture_header(MpegEncContext *s)
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
#define i(width, name, range_min, range_max)
and forward the test the status of outputs and forward it to the corresponding return FFERROR_NOT_READY If the filters stores internally one or a few frame for some it can consider them to be part of the FIFO and delay acknowledging a status change accordingly Example code
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
const uint16_t ff_h263_format[8][2]
const char * name
Name of the codec implementation.
void ff_h263_encode_mba(MpegEncContext *s)
void ff_flv2_encode_ac_esc(PutBitContext *pb, int slevel, int level, int run, int last)
static int av_cmp_q(AVRational a, AVRational b)
Compare two rationals.
static av_cold void h263_encode_init_static(void)
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
const uint8_t ff_aic_dc_scale_table[32]
const uint8_t ff_mvtab[33][2]
const uint8_t ff_h263_intra_MCBPC_bits[9]
static const int dquant_code[5]
static uint8_t * put_bits_ptr(PutBitContext *s)
Return the pointer to the byte where the bitstream writer will put the next bit.
const uint8_t ff_h263_intra_MCBPC_code[9]
static uint8_t umv_fcode_tab[MAX_MV *2+1]
Minimal fcode that a motion vector component would need in umv.
static av_const int sign_extend(int val, unsigned bits)
const uint8_t ff_mba_length[7]
void ff_h263_encode_gob_header(MpegEncContext *s, int mb_line)
Encode a group of blocks header.
const uint8_t ff_h263_inter_MCBPC_code[28]
@ AV_PICTURE_TYPE_P
Predicted.
av_cold int ff_mpv_encode_init(AVCodecContext *avctx)
static void FUNC() pred_dc(uint8_t *_src, const uint8_t *_top, const uint8_t *_left, ptrdiff_t stride, int log2_size, int c_idx)
static void h263p_encode_umotion(PutBitContext *pb, int val)
The exact code depends on how similar the blocks are and how related they are to the block
av_cold void ff_h263_init_rl_inter(void)
static const AVClass h263_class
#define AV_CODEC_FLAG_PASS1
Use internal 2pass ratecontrol in first pass mode.