Go to the documentation of this file.
39 #define H261_MAX_RUN 26
40 #define H261_MAX_LEVEL 15
41 #define H261_ESC_LEN (6 + 6 + 8)
42 #define MV_TAB_OFFSET 32
81 temp_ref =
s->picture_number * 30000LL *
s->avctx->time_base.num /
82 (1001LL *
s->avctx->time_base.den);
95 h->gob_number =
h->format - 1;
105 if (
h->format == H261_QCIF) {
115 s->last_mv[0][0][0] = 0;
116 s->last_mv[0][0][1] = 0;
122 int index =
s->mb_x +
s->mb_y *
s->mb_width;
124 if (
index % 11 == 0) {
127 s->last_mv[0][0][0] = 0;
128 s->last_mv[0][0][1] = 0;
133 if (
h->format == H261_CIF) {
138 s->mb_x += 11 * (
index % 2);
157 for (
i = 0;
i < 6;
i++)
158 if (
s->block_last_index[
i] >= 0)
171 int level,
run,
i, j, last_index, last_non_zero;
182 else if (
level < 1) {
191 }
else if ((
block[0] == 1 ||
block[0] == -1) &&
192 (
s->block_last_index[n] > -1)) {
201 last_index =
s->block_last_index[n];
202 last_non_zero =
i - 1;
203 for (;
i <= last_index;
i++) {
204 j =
s->intra_scantable.permutated[
i];
207 run =
i - last_non_zero - 1;
229 int motion_x,
int motion_y)
235 int mvd, mv_diff_x, mv_diff_y,
i, cbp;
246 mvd = motion_x | motion_y;
248 if ((cbp | mvd) == 0) {
251 s->last_mv[0][0][0] = 0;
252 s->last_mv[0][0][1] = 0;
253 s->qscale -=
s->dquant;
268 if (mvd ||
s->loop_filter)
277 if (
s->dquant && cbp) {
280 s->qscale -=
s->dquant;
294 mv_diff_x = (motion_x >> 1) -
s->last_mv[0][0][0];
295 mv_diff_y = (motion_y >> 1) -
s->last_mv[0][0][1];
296 s->last_mv[0][0][0] = (motion_x >> 1);
297 s->last_mv[0][0][1] = (motion_y >> 1);
308 for (
i = 0;
i < 6;
i++)
313 s->last_mv[0][0][0] = 0;
314 s->last_mv[0][0][1] = 0;
340 for (
size_t i = 1;;
i++) {
360 if (
s->width == 176 &&
s->height == 144) {
361 h->format = H261_QCIF;
362 }
else if (
s->width == 352 &&
s->height == 288) {
363 h->format = H261_CIF;
366 "The specified picture size of %dx%d is not valid for the "
367 "H.261 codec.\nValid sizes are 176x144, 352x288\n",
368 s->width,
s->height);
371 s->private_ctx = &
h->common;
373 s->min_qcoeff = -127;
#define CODEC_PIXFMTS(...)
const AVClass ff_mpv_enc_class
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
av_cold int ff_h261_encode_init(MpegEncContext *s)
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 they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
static void align_put_bits(PutBitContext *s)
Pad the bitstream with zeros up to the next byte boundary.
void ff_h261_encode_picture_header(MpegEncContext *s)
const int8_t ff_h261_tcoeff_run[64]
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
void ff_h261_encode_mb(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
static uint8_t mv_penalty[MAX_FCODE+1][MAX_DMV *2+1]
void ff_init_block_index(MpegEncContext *s)
const FFCodec ff_h261_encoder
int ff_mpv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pic_arg, int *got_packet)
AVCodec p
The public AVCodec.
static double val(void *priv, double ch)
#define FF_CODEC_ENCODE_CB(func)
enum H261EncContext::@120 format
static int ff_thread_once(char *control, void(*routine)(void))
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define FF_ARRAY_ELEMS(a)
static void h261_encode_gob_header(MpegEncContext *s, int mb_line)
Encode a group of blocks header.
#define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE
This encoder can reorder user opaque values from input AVFrames and return them with corresponding ou...
const uint8_t ff_h261_mba_code[35]
static struct VLCLUT vlc_lut[H261_MAX_RUN+1][32/*0..2 *H261_MAX_LEN are used */]
const uint8_t ff_h261_mv_tab[17][2]
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
#define CODEC_LONG_NAME(str)
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
static void h261_encode_block(H261EncContext *h, int16_t *block, int n)
Encode an 8x8 block.
@ AV_PICTURE_TYPE_I
Intra.
void ff_set_qscale(MpegEncContext *s, int qscale)
set qscale and update qscale dependent variables.
av_cold int ff_mpv_encode_end(AVCodecContext *avctx)
const int8_t ff_h261_tcoeff_level[64]
static uint8_t uni_h261_rl_len_last[64 *128]
int(* init)(AVBSFContext *ctx)
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
static void ff_update_block_index(MpegEncContext *s, int bits_per_raw_sample, int lowres, int chroma_x_shift)
const uint16_t ff_h261_tcoeff_vlc[65][2]
#define UNI_AC_ENC_INDEX(run, level)
static av_cold void h261_encode_init_static(void)
const uint8_t ff_h261_cbp_tab[63][2]
#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.
void ff_h261_reorder_mb_index(MpegEncContext *s)
const uint8_t ff_h261_mtype_code[10]
static uint8_t uni_h261_rl_len[64 *128]
const char * name
Name of the codec implementation.
@ AVCOL_RANGE_MPEG
Narrow or limited range content.
static int get_cbp(MpegEncContext *s, int16_t block[6][64])
static uint8_t * put_bits_ptr(PutBitContext *s)
Return the pointer to the byte where the bitstream writer will put the next bit.
static uint8_t h261_mv_codes[64][2]
const uint16_t ff_h261_mtype_map[10]
const uint8_t ff_h261_mtype_bits[10]
av_cold int ff_mpv_encode_init(AVCodecContext *avctx)
static void h261_encode_motion(PutBitContext *pb, int val)
The exact code depends on how similar the blocks are and how related they are to the block
const uint8_t ff_h261_mba_bits[35]