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){
 
  694     int range, bit_size, sign, 
code, 
bits;
 
  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;
 
  878     mb_pos= 
s->mb_x + 
s->mb_width*
s->mb_y;
 
  882 #define OFFSET(x) offsetof(MpegEncContext, x) 
  883 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM 
  886     { 
"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 },
 
  917     { 
"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
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[]
const uint8_t ff_mpeg1_dc_scale_table[128]
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 av_always_inline float scale(float x, float s)
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)
void ff_h263_encode_picture_header(MpegEncContext *s, int picture_number)
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_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.
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....
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
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[]
#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]
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
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.