Go to the documentation of this file.
   29 #include "config_components.h" 
   55 #if CONFIG_VC1_DXVA2_HWACCEL 
   58 #if CONFIG_VC1_D3D11VA_HWACCEL 
   62 #if CONFIG_VC1_D3D12VA_HWACCEL 
   65 #if CONFIG_VC1_NVDEC_HWACCEL 
   68 #if CONFIG_VC1_VAAPI_HWACCEL 
   71 #if CONFIG_VC1_VDPAU_HWACCEL 
   78 #if CONFIG_WMV3IMAGE_DECODER || CONFIG_VC1IMAGE_DECODER 
   80 typedef struct SpriteData {
 
   94     int effect_type, effect_flag;
 
   95     int effect_pcount1, effect_pcount2;   
 
   96     int effect_params1[15], effect_params2[10]; 
 
  104 static void vc1_sprite_parse_transform(
GetBitContext* gb, 
int c[7])
 
  111         c[2] = get_fp_val(gb);
 
  115         c[0] = 
c[4] = get_fp_val(gb);
 
  116         c[2] = get_fp_val(gb);
 
  119         c[0] = get_fp_val(gb);
 
  120         c[2] = get_fp_val(gb);
 
  121         c[4] = get_fp_val(gb);
 
  124         c[0] = get_fp_val(gb);
 
  125         c[1] = get_fp_val(gb);
 
  126         c[2] = get_fp_val(gb);
 
  127         c[3] = get_fp_val(gb);
 
  128         c[4] = get_fp_val(gb);
 
  131     c[5] = get_fp_val(gb);
 
  133         c[6] = get_fp_val(gb);
 
  143     for (sprite = 0; sprite <= v->
two_sprites; sprite++) {
 
  144         vc1_sprite_parse_transform(gb, sd->coefs[sprite]);
 
  145         if (sd->coefs[sprite][1] || sd->coefs[sprite][3])
 
  148         for (
i = 0; 
i < 7; 
i++)
 
  150                    sd->coefs[sprite][
i] / (1<<16),
 
  151                    (
abs(sd->coefs[sprite][
i]) & 0xFFFF) * 1000 / (1 << 16));
 
  157         switch (sd->effect_pcount1 = 
get_bits(gb, 4)) {
 
  159             vc1_sprite_parse_transform(gb, sd->effect_params1);
 
  162             vc1_sprite_parse_transform(gb, sd->effect_params1);
 
  163             vc1_sprite_parse_transform(gb, sd->effect_params1 + 7);
 
  166             for (
i = 0; 
i < sd->effect_pcount1; 
i++)
 
  167                 sd->effect_params1[
i] = get_fp_val(gb);
 
  169         if (sd->effect_type != 13 || sd->effect_params1[0] != sd->coefs[0][6]) {
 
  172             for (
i = 0; 
i < sd->effect_pcount1; 
i++)
 
  174                        sd->effect_params1[
i] / (1 << 16),
 
  175                        (
abs(sd->effect_params1[
i]) & 0xFFFF) * 1000 / (1 << 16));
 
  179         sd->effect_pcount2 = 
get_bits(gb, 16);
 
  180         if (sd->effect_pcount2 > 10) {
 
  183         } 
else if (sd->effect_pcount2) {
 
  186             while (++i < sd->effect_pcount2) {
 
  187                 sd->effect_params2[
i] = get_fp_val(gb);
 
  189                        sd->effect_params2[
i] / (1 << 16),
 
  190                        (
abs(sd->effect_params2[
i]) & 0xFFFF) * 1000 / (1 << 16));
 
  209 static void vc1_draw_sprites(
VC1Context *v, SpriteData* sd)
 
  211     int i, plane, row, sprite;
 
  212     int sr_cache[2][2] = { { -1, -1 }, { -1, -1 } };
 
  213     uint8_t* src_h[2][2];
 
  214     int xoff[2], xadv[2], yoff[2], yadv[2], 
alpha;
 
  220         xadv[
i] = sd->coefs[
i][0];
 
  229     for (plane = 0; plane < (CONFIG_GRAY && 
s->avctx->flags & 
AV_CODEC_FLAG_GRAY ? 1 : 3); plane++) {
 
  236             for (sprite = 0; sprite <= v->
two_sprites; sprite++) {
 
  237                 uint8_t *iplane = 
s->current_picture.f->data[plane];
 
  238                 int      iline  = 
s->current_picture.f->linesize[plane];
 
  239                 int      ycoord = yoff[sprite] + yadv[sprite] * row;
 
  240                 int      yline  = ycoord >> 16;
 
  242                 ysub[sprite] = ycoord & 0xFFFF;
 
  244                     iplane = 
s->last_picture.f->data[plane];
 
  245                     iline  = 
s->last_picture.f->linesize[plane];
 
  248                 if (!(xoff[sprite] & 0xFFFF) && xadv[sprite] == 1 << 16) {
 
  249                         src_h[sprite][0] = iplane + (xoff[sprite] >> 16) +  yline      * iline;
 
  251                         src_h[sprite][1] = iplane + (xoff[sprite] >> 16) + next_line;
 
  253                     if (sr_cache[sprite][0] != yline) {
 
  254                         if (sr_cache[sprite][1] == yline) {
 
  256                             FFSWAP(
int,        sr_cache[sprite][0],   sr_cache[sprite][1]);
 
  259                             sr_cache[sprite][0] = yline;
 
  262                     if (ysub[sprite] && sr_cache[sprite][1] != yline + 1) {
 
  264                                            iplane + next_line, xoff[sprite],
 
  265                                            xadv[sprite], 
width);
 
  266                         sr_cache[sprite][1] = yline + 1;
 
  268                     src_h[sprite][0] = v->
sr_rows[sprite][0];
 
  269                     src_h[sprite][1] = v->
sr_rows[sprite][1];
 
  277                     memcpy(dst, src_h[0][0], 
width);
 
  280                 if (ysub[0] && ysub[1]) {
 
  282                                                        src_h[1][0], src_h[1][1], ysub[1], 
alpha, 
width);
 
  283                 } 
else if (ysub[0]) {
 
  286                 } 
else if (ysub[1]) {
 
  313     memset(&sd, 0, 
sizeof(sd));
 
  315     ret = vc1_parse_sprites(v, gb, &sd);
 
  319     if (!
s->current_picture.f || !
s->current_picture.f->data[0]) {
 
  324     if (v->
two_sprites && (!
s->last_picture_ptr || !
s->last_picture.f->data[0])) {
 
  333     vc1_draw_sprites(v, &sd);
 
  350         for (plane = 0; plane < (CONFIG_GRAY && 
s->avctx->flags & 
AV_CODEC_FLAG_GRAY ? 1 : 3); plane++)
 
  352                 memset(
f->data[plane] + 
i * 
f->linesize[plane],
 
  353                        plane ? 128 : 0, 
f->linesize[plane]);
 
  362     int mb_height = 
FFALIGN(
s->mb_height, 2);
 
  407     v->
mv_f_base        = 
av_mallocz(2 * (
s->b8_stride * (mb_height * 2 + 1) + 
s->mb_stride * (mb_height + 1) * 2));
 
  411     v->
mv_f[1]          = v->
mv_f[0] + (
s->b8_stride * (mb_height * 2 + 1) + 
s->mb_stride * (mb_height + 1) * 2);
 
  416     v->
mv_f_next[1]     = v->
mv_f_next[0] + (
s->b8_stride * (mb_height * 2 + 1) + 
s->mb_stride * (mb_height + 1) * 2);
 
  419         for (
i = 0; 
i < 4; 
i++)
 
  425                                  s->block, 
s->block_last_index,
 
  426                                  s->mb_width, 
s->mb_height);
 
  488     for (
i = 0; 
i < 64; 
i++) {
 
  489 #define transpose(x) (((x) >> 3) | (((x) & 7) << 3)) 
  502     static VLCElem vlc_table[32372];
 
  514     for (
int i = 0; 
i < 3; 
i++) {
 
  528     for (
int i = 0; 
i < 4; 
i++) {
 
  562     for (
int i = 0; 
i < 8; 
i++) {
 
  608     s->msmpeg4_version = 6;
 
  664         } 
else if (count < 0) {
 
  672         uint8_t *buf2 = 
NULL;
 
  673         int seq_initialized = 0, ep_initialized = 0;
 
  686         for (; next < end; start = next) {
 
  688             size = next - start - 4;
 
  711         if (!seq_initialized || !ep_initialized) {
 
  786     for (
i = 0; 
i < 4; 
i++)
 
  815     const uint8_t *buf = avpkt->
data;
 
  816     int buf_size = avpkt->
size, n_slices = 0, 
i, 
ret;
 
  819     uint8_t *buf2 = 
NULL;
 
  820     const uint8_t *buf_start = buf, *buf_start_second_field = 
NULL;
 
  821     int mb_height, n_slices1=-1;
 
  826         const uint8_t *rawbuf;
 
  829     unsigned slices_allocated = 0;
 
  839         if (
s->low_delay == 0 && 
s->next_picture_ptr) {
 
  842             s->next_picture_ptr = 
NULL;
 
  853         size_t next_allocated = 0;
 
  859             const uint8_t *start, *end, *next;
 
  863             for (start = buf, end = buf + buf_size; next < end; start = next) {
 
  865                 size = next - start - 4;
 
  866                 if (
size <= 0) 
continue;
 
  874                     buf_start_second_field = start;
 
  875                     av_size_mult(
sizeof(*slices), n_slices+1, &next_allocated);
 
  883                     if (!slices[n_slices].buf) {
 
  888                                                               slices[n_slices].buf);
 
  891                     slices[n_slices].mby_start = avctx->
coded_height + 31 >> 5;
 
  892                     slices[n_slices].rawbuf = start;
 
  893                     slices[n_slices].raw_size = 
size + 4;
 
  894                     n_slices1 = n_slices - 1; 
 
  905                     av_size_mult(
sizeof(*slices), n_slices+1, &next_allocated);
 
  913                     if (!slices[n_slices].buf) {
 
  918                                                               slices[n_slices].buf);
 
  921                     slices[n_slices].mby_start = 
get_bits(&slices[n_slices].gb, 9);
 
  922                     slices[n_slices].rawbuf = start;
 
  923                     slices[n_slices].raw_size = 
size + 4;
 
  929         } 
else if (v->
interlace && ((buf[0] & 0xC0) == 0xC0)) { 
 
  930             const uint8_t *divider;
 
  939                 buf_start_second_field = divider;
 
  940                 av_size_mult(
sizeof(*slices), n_slices+1, &next_allocated);
 
  948                 if (!slices[n_slices].buf) {
 
  955                 slices[n_slices].mby_start = 
s->mb_height + 1 >> 1;
 
  956                 slices[n_slices].rawbuf = divider;
 
  957                 slices[n_slices].raw_size = buf + buf_size - divider;
 
  958                 n_slices1 = n_slices - 1;
 
  990     if (
s->context_initialized &&
 
  996     if (!
s->context_initialized) {
 
 1068     s->current_picture_ptr->f->repeat_pict = 0;
 
 1072         s->current_picture_ptr->f->repeat_pict = 1;
 
 1075         s->current_picture_ptr->f->repeat_pict = v->
rptfrm * 2;
 
 1081         if (v->
field_mode && buf_start_second_field) {
 
 1085                                        buf_start_second_field - buf_start);
 
 1089             if (n_slices1 == -1) {
 
 1091                 ret = 
hwaccel->decode_slice(avctx, buf_start,
 
 1092                                             buf_start_second_field - buf_start);
 
 1096                 ret = 
hwaccel->decode_slice(avctx, buf_start,
 
 1097                                             slices[0].rawbuf - buf_start);
 
 1101                 for (
i = 0 ; 
i < n_slices1 + 1; 
i++) {
 
 1102                     s->gb = slices[
i].gb;
 
 1103                     s->mb_y = slices[
i].mby_start;
 
 1116                     ret = 
hwaccel->decode_slice(avctx, slices[
i].rawbuf,
 
 1117                                                        slices[
i].raw_size);
 
 1127             s->gb = slices[n_slices1 + 1].gb;
 
 1128             s->mb_y = slices[n_slices1 + 1].mby_start;
 
 1139             ret = 
hwaccel->start_frame(avctx, buf_start_second_field,
 
 1140                                        (buf + buf_size) - buf_start_second_field);
 
 1144             if (n_slices - n_slices1 == 2) {
 
 1146                 ret = 
hwaccel->decode_slice(avctx, buf_start_second_field,
 
 1147                                             (buf + buf_size) - buf_start_second_field);
 
 1151                 ret = 
hwaccel->decode_slice(avctx, buf_start_second_field,
 
 1152                                             slices[n_slices1 + 2].rawbuf - buf_start_second_field);
 
 1156                 for (
i = n_slices1 + 2; 
i < n_slices; 
i++) {
 
 1157                     s->gb = slices[
i].gb;
 
 1158                     s->mb_y = slices[
i].mby_start;
 
 1171                     ret = 
hwaccel->decode_slice(avctx, slices[
i].rawbuf,
 
 1172                                                 slices[
i].raw_size);
 
 1183                                        (buf + buf_size) - buf_start);
 
 1187             if (n_slices == 0) {
 
 1189                 ret = 
hwaccel->decode_slice(avctx, buf_start,
 
 1190                                             (buf + buf_size) - buf_start);
 
 1195                 ret = 
hwaccel->decode_slice(avctx, buf_start,
 
 1196                                             slices[0].rawbuf - buf_start);
 
 1201                 for (
i = 0 ; 
i < n_slices; 
i++) {
 
 1202                     s->gb = slices[
i].gb;
 
 1203                     s->mb_y = slices[
i].mby_start;
 
 1216                     ret = 
hwaccel->decode_slice(avctx, slices[
i].rawbuf,
 
 1217                                                        slices[
i].raw_size);
 
 1232             s->current_picture.f->linesize[0] <<= 1;
 
 1233             s->current_picture.f->linesize[1] <<= 1;
 
 1234             s->current_picture.f->linesize[2] <<= 1;
 
 1236             s->uvlinesize                    <<= 1;
 
 1242         for (
i = 0; 
i <= n_slices; 
i++) {
 
 1243             if (
i > 0 &&  slices[
i - 1].mby_start >= mb_height) {
 
 1246                            "picture boundary (%d >= %d)\n", 
i,
 
 1247                            slices[
i - 1].mby_start, mb_height);
 
 1253                 v->
mb_off       = 
s->mb_stride * 
s->mb_height >> 1;
 
 1282             s->start_mb_y = (
i == 0) ? 0 : 
FFMAX(0, slices[
i-1].mby_start % mb_height);
 
 1284                 s->end_mb_y = (
i == n_slices     ) ? mb_height : 
FFMIN(mb_height, slices[
i].mby_start % mb_height);
 
 1286                 if (
i >= n_slices) {
 
 1290                 s->end_mb_y = (
i == n_slices1 + 1) ? mb_height : 
FFMIN(mb_height, slices[
i].mby_start % mb_height);
 
 1292             if (
s->end_mb_y <= 
s->start_mb_y) {
 
 1303             if (
i != n_slices) {
 
 1304                 s->gb = slices[
i].gb;
 
 1309             s->current_picture.f->linesize[0] >>= 1;
 
 1310             s->current_picture.f->linesize[1] >>= 1;
 
 1311             s->current_picture.f->linesize[2] >>= 1;
 
 1313             s->uvlinesize                    >>= 1;
 
 1319         ff_dlog(
s->avctx, 
"Consumed %i/%i bits\n",
 
 1346 #if CONFIG_WMV3IMAGE_DECODER || CONFIG_VC1IMAGE_DECODER 
 1347         if ((
ret = vc1_decode_sprites(v, &
s->gb)) < 0)
 
 1360         } 
else if (
s->last_picture_ptr) {
 
 1371     for (
i = 0; 
i < n_slices; 
i++)
 
 1378     for (
i = 0; 
i < n_slices; 
i++)
 
 1397 #if CONFIG_VC1_DXVA2_HWACCEL 
 1400 #if CONFIG_VC1_D3D11VA_HWACCEL 
 1403 #if CONFIG_VC1_D3D11VA2_HWACCEL 
 1406 #if CONFIG_VC1_D3D12VA_HWACCEL 
 1409 #if CONFIG_VC1_NVDEC_HWACCEL 
 1412 #if CONFIG_VC1_VAAPI_HWACCEL 
 1415 #if CONFIG_VC1_VDPAU_HWACCEL 
 1423 #if CONFIG_WMV3_DECODER 
 1436 #if CONFIG_WMV3_DXVA2_HWACCEL 
 1439 #if CONFIG_WMV3_D3D11VA_HWACCEL 
 1442 #if CONFIG_WMV3_D3D11VA2_HWACCEL 
 1445 #if CONFIG_WMV3_D3D12VA_HWACCEL 
 1448 #if CONFIG_WMV3_NVDEC_HWACCEL 
 1451 #if CONFIG_WMV3_VAAPI_HWACCEL 
 1454 #if CONFIG_WMV3_VDPAU_HWACCEL 
 1463 #if CONFIG_WMV3IMAGE_DECODER 
 1465     .
p.
name         = 
"wmv3image",
 
 1474     .flush          = vc1_sprite_flush,
 
 1478 #if CONFIG_VC1IMAGE_DECODER 
 1480     .
p.
name         = 
"vc1image",
 
 1489     .flush          = vc1_sprite_flush,
 
  
#define HWACCEL_D3D12VA(codec)
 
int av_size_mult(size_t a, size_t b, size_t *r)
Multiply two size_t values checking for overflow.
 
av_cold int ff_mpv_common_init(MpegEncContext *s)
init common structure for both encoder and decoder.
 
void(* sprite_v_double_noscale)(uint8_t *dst, const uint8_t *src1a, const uint8_t *src2a, int alpha, int width)
 
const struct AVHWAccel * hwaccel
Hardware accelerator in use.
 
uint8_t zz_8x8[4][64]
Zigzag table for TT_8x8, permuted for IDCT.
 
#define AV_LOG_WARNING
Something somehow does not look correct.
 
void ff_simple_idct44_add(uint8_t *dest, ptrdiff_t line_size, int16_t *block)
 
int new_sprite
Frame decoding info for sprite modes.
 
@ AV_PIX_FMT_CUDA
HW acceleration through CUDA.
 
AVPixelFormat
Pixel format.
 
#define AV_EF_EXPLODE
abort decoding on minor error detection
 
static const uint8_t vc1_cbpcy_p_bits[4][64]
 
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
 
@ PROGRESSIVE
in the bitstream is reported as 00b
 
enum AVColorSpace colorspace
YUV colorspace type.
 
int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt)
Select the (possibly hardware accelerated) pixel format.
 
static enum AVPixelFormat vc1_hwaccel_pixfmt_list_420[]
 
const FFCodec ff_vc1image_decoder
 
static const uint8_t vc1_intfr_non4mv_mbmode_bits[4][9]
 
int end_mb_x
Horizontal macroblock limit (used only by mss2)
 
int interlace
Progressive/interlaced (RPTFTM syntax element)
 
static const uint8_t vc1_subblkpat_codes[3][15]
 
void(* vc1_inv_trans_4x4)(uint8_t *dest, ptrdiff_t stride, int16_t *block)
 
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
 
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
 
static const uint8_t vc1_2ref_mvdata_bits[8][126]
 
av_cold void ff_qpeldsp_init(QpelDSPContext *c)
 
static const uint8_t vc1_2mv_block_pattern_bits[4][4]
 
static int get_bits_count(const GetBitContext *s)
 
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
 
int field_picture
whether or not the picture was encoded in separate fields
 
This structure describes decoded (raw) audio or video data.
 
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic.
 
#define HWACCEL_DXVA2(codec)
 
void ff_simple_idct84_add(uint8_t *dest, ptrdiff_t line_size, int16_t *block)
 
static const uint8_t vc1_intfr_4mv_mbmode_bits[4][15]
 
#define HWACCEL_D3D11VA2(codec)
 
#define VC1_SUBBLKPAT_VLC_BITS
 
uint8_t * mv_type_mb_plane
bitplane for mv_type == (4MV)
 
@ AV_PIX_FMT_D3D11VA_VLD
HW decoding through Direct3D11 via old API, Picture.data[3] contains a ID3D11VideoDecoderOutputView p...
 
#define PICT_BOTTOM_FIELD
 
#define VC1_CBPCY_P_VLC_BITS
 
void(* vc1_inv_trans_8x8_dc)(uint8_t *dest, ptrdiff_t stride, int16_t *block)
 
struct AVCodecContext * avctx
 
int flags
Frame flags, a combination of AV_FRAME_FLAGS.
 
void(* vc1_inv_trans_4x4_dc)(uint8_t *dest, ptrdiff_t stride, int16_t *block)
 
#define AVERROR_UNKNOWN
Unknown error, typically from an external library.
 
static const uint8_t vc1_norm2_bits[4]
 
static const uint8_t vc1_ttmb_bits[3][16]
 
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
 
static const uint16_t vc1_intfr_4mv_mbmode_codes[4][15]
 
#define FF_DEBUG_PICT_INFO
 
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
 
static const av_always_inline uint8_t * find_next_marker(const uint8_t *src, const uint8_t *end)
Find VC-1 marker in buffer.
 
#define AV_FRAME_FLAG_TOP_FIELD_FIRST
A flag to mark frames where the top field is displayed first if the content is interlaced.
 
int ff_vc1_parse_frame_header(VC1Context *v, GetBitContext *gb)
 
static void skip_bits(GetBitContext *s, int n)
 
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
 
AVCodec p
The public AVCodec.
 
int pict_type
AV_PICTURE_TYPE_I, AV_PICTURE_TYPE_P, AV_PICTURE_TYPE_B, ...
 
#define VC1_INTFR_NON4MV_MBMODE_VLC_BITS
 
enum AVDiscard skip_frame
Skip decoding for selected frames.
 
const VLCElem * ff_vc1_if_1mv_mbmode_vlc[8]
 
static av_cold int vc1_decode_init(AVCodecContext *avctx)
Initialize a VC1/WMV3 decoder.
 
int first_pic_header_flag
 
int ff_vc1_decode_sequence_header(AVCodecContext *avctx, VC1Context *v, GetBitContext *gb)
Decode Simple/Main Profiles sequence header.
 
int flags
AV_CODEC_FLAG_*.
 
VLCElem ff_vc1_norm6_vlc[556]
 
#define HWACCEL_VDPAU(codec)
 
#define AV_CODEC_FLAG_LOW_DELAY
Force low delay.
 
void ff_print_debug_info(const MpegEncContext *s, const Picture *p, AVFrame *pict)
 
#define VC1_TTMB_VLC_BITS
 
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
 
#define VC1_IF_MMV_MBMODE_VLC_BITS
 
void ff_mpv_common_end(MpegEncContext *s)
 
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries.
 
static int ff_thread_once(char *control, void(*routine)(void))
 
static const uint8_t vc1_ttblk_codes[3][8]
 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
 
const uint8_t ff_wmv3_dc_scale_table[32]
 
void(* vc1_inv_trans_8x4_dc)(uint8_t *dest, ptrdiff_t stride, int16_t *block)
 
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
 
static const uint8_t vc1_1ref_mvdata_bits[4][72]
 
av_cold void ff_msmp4_vc1_vlcs_init_once(void)
 
For static VLCs, the number of bits can often be hardcoded at each get_vlc2() callsite.
 
void(* sprite_v_double_twoscale)(uint8_t *dst, const uint8_t *src1a, const uint8_t *src1b, int offset1, const uint8_t *src2a, const uint8_t *src2b, int offset2, int alpha, int width)
 
static const uint8_t vc1_2mv_block_pattern_codes[4][4]
 
int has_b_frames
Size of the frame reordering buffer in the decoder.
 
const VLCElem * ff_vc1_2mv_block_pattern_vlc[4]
 
void ff_er_frame_end(ERContext *s, int *decode_error_flags)
Indicate that a frame has finished decoding and perform error concealment in case it has been enabled...
 
void * av_fast_realloc(void *ptr, unsigned int *size, size_t min_size)
Reallocate the given buffer if it is not large enough, otherwise do nothing.
 
const FFCodec ff_vc1_decoder
 
#define FF_CODEC_DECODE_CB(func)
 
av_cold void ff_blockdsp_init(BlockDSPContext *c)
 
@ AV_PIX_FMT_DXVA2_VLD
HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer.
 
int res_sprite
Simple/Main Profile sequence header.
 
int res_fasttx
reserved, always 1
 
static av_cold void vc1_init_static(void)
 
static const uint8_t vc1_if_mmv_mbmode_codes[8][8]
 
uint8_t * mv_f[2]
0: MV obtained from same field, 1: opposite field
 
static const uint32_t vc1_ac_tables[AC_MODES][186][2]
 
void(* sprite_h)(uint8_t *dst, const uint8_t *src, int offset, int advance, int count)
 
static const uint8_t vc1_subblkpat_bits[3][15]
 
uint8_t * over_flags_plane
Overflags bitplane.
 
void ff_mpeg_er_frame_start(MpegEncContext *s)
 
#define av_assert0(cond)
assert() equivalent, that is always enabled.
 
void ff_simple_idct48_add(uint8_t *dest, ptrdiff_t line_size, int16_t *block)
 
static const uint8_t vc1_imode_bits[7]
 
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
 
static const uint8_t vc1_norm2_codes[4]
 
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
 
static const uint8_t vc1_norm6_bits[64]
 
av_cold int ff_intrax8_common_init(AVCodecContext *avctx, IntraX8Context *w, int16_t(*block)[64], int block_last_index[12], int mb_width, int mb_height)
Initialize IntraX8 frame decoder.
 
#define CODEC_LONG_NAME(str)
 
const VLCElem * ff_vc1_ttblk_vlc[3]
 
int top_blk_sh
Either 3 or 0, positions of l/t in blk[].
 
#define VC1_INTFR_4MV_MBMODE_VLC_BITS
 
#define VC1_1REF_MVDATA_VLC_BITS
 
@ AVDISCARD_ALL
discard all
 
const FFCodec ff_wmv3_decoder
 
uint8_t * forward_mb_plane
bitplane for "forward" MBs
 
const VLCElem * ff_vc1_cbpcy_p_vlc[4]
 
const VLCElem * ff_vc1_if_mmv_mbmode_vlc[8]
 
void ff_simple_idct_add_int16_8bit(uint8_t *dest, ptrdiff_t line_size, int16_t *block)
 
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
 
enum AVColorRange color_range
MPEG vs JPEG YUV range.
 
uint8_t * direct_mb_plane
bitplane for "direct" MBs
 
void(* vc1_inv_trans_8x4)(uint8_t *dest, ptrdiff_t stride, int16_t *block)
 
const VLCElem * ff_vc1_2ref_mvdata_vlc[8]
 
av_cold void ff_vc1_init_transposed_scantables(VC1Context *v)
 
static const uint16_t vc1_cbpcy_p_codes[4][64]
 
int field_mode
1 for interlaced field pictures
 
@ AVCHROMA_LOC_LEFT
MPEG-2/4 4:2:0, H.264 default for 4:2:0.
 
void ff_vc1_decode_blocks(VC1Context *v)
 
uint8_t * blk_mv_type_base
 
av_cold void ff_intrax8_common_end(IntraX8Context *w)
Destroy IntraX8 frame structure.
 
@ AV_PICTURE_TYPE_I
Intra.
 
static unsigned int get_bits1(GetBitContext *s)
 
const VLCElem * cbpcy_vlc
CBPCY VLC table.
 
static const uint8_t vc1_intfr_non4mv_mbmode_codes[4][9]
 
int16_t(* luma_mv_base)[2]
 
@ AV_PIX_FMT_D3D12
Hardware surfaces for Direct3D 12.
 
@ AV_PIX_FMT_GRAY8
Y , 8bpp.
 
#define VC1_ICBPCY_VLC_BITS
 
int level
Encoding level descriptor.
 
@ AVCOL_RANGE_UNSPECIFIED
 
void(* vc1_inv_trans_4x8_dc)(uint8_t *dest, ptrdiff_t stride, int16_t *block)
 
H264ChromaContext h264chroma
 
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
 
av_cold void ff_vc1_init_common(VC1Context *v)
Init VC-1 specific tables and VC1Context members.
 
const uint8_t ff_vc1_adv_interlaced_8x8_zz[64]
 
av_cold void ff_vc1dsp_init(VC1DSPContext *dsp)
 
@ AVDISCARD_NONKEY
discard all frames except keyframes
 
const VLCElem * ff_vc1_icbpcy_vlc[8]
 
enum AVPictureType pict_type
Picture type of the frame.
 
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
 
int(* init)(AVBSFContext *ctx)
 
#define VC1_TTBLK_VLC_BITS
 
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
 
#define AV_CODEC_FLAG_GRAY
Only decode/encode grayscale.
 
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
 
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame.
 
const VLCElem * ff_vc1_1ref_mvdata_vlc[4]
 
const FFCodec ff_wmv3image_decoder
 
const VLCElem * ff_vc1_mv_diff_vlc[4]
 
static const uint16_t vc1_norm6_codes[64]
 
static const uint8_t vc1_if_1mv_mbmode_codes[8][6]
 
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_RB32
 
const VLCElem * ff_vc1_intfr_4mv_mbmode_vlc[4]
 
const VLCElem * ff_vc1_ac_coeff_table[8]
 
static const uint8_t vc1_ttblk_bits[3][8]
 
static const uint8_t vc1_icbpcy_p_bits[8][63]
 
int ff_mpv_frame_start(MpegEncContext *s, AVCodecContext *avctx)
generic function called after decoding the header and before a frame is decoded.
 
void ff_mpeg_flush(AVCodecContext *avctx)
 
#define HWACCEL_D3D11VA(codec)
 
void(* sprite_v_single)(uint8_t *dst, const uint8_t *src1a, const uint8_t *src1b, int offset, int width)
 
@ AV_PIX_FMT_D3D11
Hardware surfaces for Direct3D11.
 
#define HWACCEL_NVDEC(codec)
 
@ AV_PIX_FMT_VAAPI
Hardware acceleration through VA-API, data[3] contains a VASurfaceID.
 
void(* vc1_inv_trans_8x8)(int16_t *b)
 
uint8_t * sr_rows[2][2]
Sprite resizer line cache.
 
#define VC1_IMODE_VLC_BITS
 
#define AV_LOG_INFO
Standard information.
 
#define VC1_IF_1MV_MBMODE_VLC_BITS
 
@ AV_PIX_FMT_VDPAU
HW acceleration through VDPAU, Picture.data[3] contains a VdpVideoSurface.
 
char av_get_picture_type_char(enum AVPictureType pict_type)
Return a single letter to describe the given picture type pict_type.
 
av_cold void ff_init_scantable(const uint8_t *permutation, ScanTable *st, const uint8_t *src_scantable)
 
Picture * current_picture_ptr
pointer to the current picture
 
static enum AVPixelFormat vc1_get_format(AVCodecContext *avctx)
 
void ff_simple_idct_int16_8bit(int16_t *block)
 
void(* sprite_v_double_onescale)(uint8_t *dst, const uint8_t *src1a, const uint8_t *src1b, int offset1, const uint8_t *src2a, int alpha, int width)
 
static const uint8_t vc1_if_1mv_mbmode_bits[8][6]
 
const VLCElem * ff_vc1_intfr_non4mv_mbmode_vlc[4]
 
#define i(width, name, range_min, range_max)
 
int(* vc1_unescape_buffer)(const uint8_t *src, int size, uint8_t *dst)
 
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
 
void ff_mpv_decode_init(MpegEncContext *s, AVCodecContext *avctx)
Initialize the given MpegEncContext for decoding.
 
static const uint8_t vc1_4mv_block_pattern_bits[4][16]
 
#define VC1_4MV_BLOCK_PATTERN_VLC_BITS
 
int ff_vc1_decode_entry_point(AVCodecContext *avctx, VC1Context *v, GetBitContext *gb)
 
int ff_vc1_parse_frame_header_adv(VC1Context *v, GetBitContext *gb)
 
const int ff_vc1_ac_sizes[AC_MODES]
 
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
 
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
 
const char * name
Name of the codec implementation.
 
int * ttblk
Transform type at the block level.
 
#define VC1_NORM6_VLC_BITS
 
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
 
#define AV_FRAME_FLAG_INTERLACED
A flag to mark frames whose content is interlaced.
 
@ AVCOL_RANGE_MPEG
Narrow or limited range content.
 
static const uint8_t vc1_if_mmv_mbmode_bits[8][8]
 
static const uint16_t vc1_icbpcy_p_codes[8][63]
 
#define FFSWAP(type, a, b)
 
AVFrame * sprite_output_frame
 
int color_prim
8 bits, chroma coordinates of the color primaries
 
static const char * hwaccel
 
static const uint16_t vc1_mv_diff_codes[4][73]
 
#define AV_INPUT_BUFFER_PADDING_SIZE
 
const VLCElem * ff_vc1_subblkpat_vlc[3]
 
#define VC1_2MV_BLOCK_PATTERN_VLC_BITS
 
main external API structure.
 
VLCElem ff_vc1_imode_vlc[1<< VC1_IMODE_VLC_BITS]
 
@ AV_PICTURE_TYPE_B
Bi-dir predicted.
 
static const uint8_t vc1_4mv_block_pattern_codes[4][16]
 
#define VLC_INIT_STATIC_TABLE(vlc_table, nb_bits, nb_codes, bits, bits_wrap, bits_size, codes, codes_wrap, codes_size, flags)
 
static const FFHWAccel * ffhwaccel(const AVHWAccel *codec)
 
#define VC1_NORM2_VLC_BITS
 
static const uint16_t vc1_ttmb_codes[3][16]
 
int profile
Sequence header data for all Profiles TODO: choose between ints, uint8_ts and monobit flags.
 
void ff_mpv_frame_end(MpegEncContext *s)
 
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
 
av_cold void ff_h264chroma_init(H264ChromaContext *c, int bit_depth)
 
const AVProfile ff_vc1_profiles[]
 
int matrix_coef
8 bits, Color primaries->YCbCr transform matrix
 
int coded_width
Bitstream width / height, may be different from width/height e.g.
 
enum FrameCodingMode fcm
Frame decoding info for Advanced profile.
 
@ AV_PICTURE_TYPE_P
Predicted.
 
static const VLCElem * ff_vlc_init_tables(VLCInitState *state, int nb_bits, int nb_codes, const void *bits, int bits_wrap, int bits_size, const void *codes, int codes_wrap, int codes_size, int flags)
 
const VLCElem * ff_vc1_ttmb_vlc[3]
 
static const uint32_t vc1_2ref_mvdata_codes[8][126]
 
int max_b_frames
maximum number of B-frames between non-B-frames Note: The output will be delayed by max_b_frames+1 re...
 
#define avpriv_request_sample(...)
 
VLCElem ff_vc1_norm2_vlc[1<< VC1_NORM2_VLC_BITS]
 
const VLCElem * ff_vc1_4mv_block_pattern_vlc[4]
 
#define VLC_INIT_STATE(_table)
 
static const int16_t alpha[]
 
int level
Advanced Profile.
 
This structure stores compressed data.
 
uint8_t * acpred_plane
AC prediction flags bitplane.
 
@ AV_PICTURE_TYPE_BI
BI type.
 
#define VC1_2REF_MVDATA_VLC_BITS
 
#define HWACCEL_VAAPI(codec)
 
static const uint8_t vc1_imode_codes[7]
 
int width
picture width / height.
 
static av_cold int vc1_decode_init_alloc_tables(VC1Context *v)
 
int linesize[AV_NUM_DATA_POINTERS]
For video, a positive or negative value, which is typically indicating the size in bytes of each pict...
 
int transfer_char
8 bits, Opto-electronic transfer characteristics
 
av_cold int ff_vc1_decode_end(AVCodecContext *avctx)
Close a VC1/WMV3 decoder.
 
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
 
static int vc1_decode_frame(AVCodecContext *avctx, AVFrame *pict, int *got_frame, AVPacket *avpkt)
Decode a VC1/WMV3 frame.
 
uint8_t * blk_mv_type
0: frame MV, 1: field MV (interlaced frame)
 
#define VC1_MV_DIFF_VLC_BITS
 
int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx)
Check if the given dimension of an image is valid, meaning that all bytes of the image can be address...
 
static const uint32_t vc1_1ref_mvdata_codes[4][72]
 
void(* vc1_inv_trans_4x8)(uint8_t *dest, ptrdiff_t stride, int16_t *block)
 
@ AVDISCARD_NONREF
discard all non reference
 
const uint8_t ff_wmv1_scantable[WMV1_SCANTABLE_COUNT][64]
 
av_cold int ff_vc1_decode_init(AVCodecContext *avctx)
 
static const uint8_t vc1_mv_diff_bits[4][73]