236 const int bitplane_index = n / 2;
237 const int ff_bp_index = y * stride + x;
240 v = ff_bp[0][ff_bp_index];
242 v |= ff_bp[1][ff_bp_index] << 1;
244 v |= ff_bp[2][ff_bp_index] << 2;
245 bitplane[bitplane_index] = (bitplane[bitplane_index] << 4) | v;
253 VAPictureParameterBufferVC1 pic_param;
258 pic_param = (VAPictureParameterBufferVC1) {
259 .forward_reference_picture = VA_INVALID_ID,
260 .backward_reference_picture = VA_INVALID_ID,
261 .inloop_decoded_picture = VA_INVALID_ID,
262 .sequence_fields.bits = {
277 .entrypoint_fields.bits = {
283 .conditional_overlap_flag = v->
condover,
285 .range_mapping_fields.bits = {
295 .rounding_control = v->
rnd,
297 .picture_resolution_index = v->
respic,
298 .picture_fields.bits = {
300 .frame_coding_mode = v->
fcm,
301 .top_field_first = v->
tff,
303 .intensity_compensation = v->
intcomp,
307 #if VA_CHECK_VERSION(1, 1, 0)
312 .raw_coding.flags = {
321 .bitplane_present.flags = {
330 .reference_fields.bits = {
332 .reference_distance = v->
refdist,
333 .num_reference_pictures = v->
numref,
334 .reference_field_pic_indicator = v->
reffield,
344 .extended_mv_range = v->
mvrange,
348 .pic_quantizer_fields.bits = {
352 .pic_quantizer_scale = v->
pq,
359 .alt_pic_quantizer = v->
altpq,
361 .transform_fields.bits = {
363 .mb_level_transform_type_flag = v->
ttmbf,
371 switch (
s->pict_type) {
381 VAPictureParameterBufferType,
382 &pic_param,
sizeof(pic_param));
386 if (pic_param.bitplane_present.value & 0x7f) {
390 size_t size = (
s->mb_width *
s->mb_height + 1) / 2;
398 switch (
s->pict_type) {
400 ff_bp[0] = pic_param.bitplane_present.flags.bp_direct_mb ? v->direct_mb_plane :
NULL;
401 ff_bp[1] = pic_param.bitplane_present.flags.bp_skip_mb ?
s->mbskip_table :
NULL;
402 ff_bp[2] = pic_param.bitplane_present.flags.bp_mv_type_mb ? v->mv_type_mb_plane :
NULL;
406 ff_bp[0] = pic_param.bitplane_present.flags.bp_direct_mb ? v->direct_mb_plane :
NULL;
407 ff_bp[1] = pic_param.bitplane_present.flags.bp_skip_mb ?
s->mbskip_table :
NULL;
408 ff_bp[2] = pic_param.bitplane_present.flags.bp_forward_mb ? v->forward_mb_plane :
NULL;
413 ff_bp[0] = pic_param.bitplane_present.flags.bp_field_tx ? v->fieldtx_plane :
NULL;
414 ff_bp[1] = pic_param.bitplane_present.flags.bp_ac_pred ? v->acpred_plane :
NULL;
415 ff_bp[2] = pic_param.bitplane_present.flags.bp_overflags ? v->over_flags_plane :
NULL;
425 for (y = 0; y <
s->mb_height; y++)
426 for (x = 0; x <
s->mb_width; x++, n++)
432 VABitPlaneBufferType,
467 VASliceParameterBufferVC1 slice_param;
476 slice_param = (VASliceParameterBufferVC1) {
477 .slice_data_size =
size,
478 .slice_data_offset = 0,
479 .slice_data_flag = VA_SLICE_DATA_FLAG_ALL,
481 .slice_vertical_position = s->
mb_y,
485 &slice_param,
sizeof(slice_param),
495 #if CONFIG_WMV3_VAAPI_HWACCEL
497 .
name =
"wmv3_vaapi",
in the bitstream is reported as 00b
uint8_t bfraction_lut_index
Index for BFRACTION value (see Table 40, reproduced into ff_vc1_bfraction_lut[])
static int vc1_has_FIELDTX_bitplane(const VC1Context *v)
Check whether the FIELDTX bitplane is present.
static int vc1_get_PTYPE(const VC1Context *v)
Reconstruct bitstream PTYPE (7.1.1.4, index into Table-35)
uint8_t lumscale2
for interlaced field P picture
int reffield
if numref = 0 (1 reference) then reffield decides which
int coded_width
Bitstream width / height, may be different from width/height e.g.
int mv_type_is_raw
mv type mb plane is not coded
uint8_t dmvrange
Frame decoding info for interlaced picture.
static av_cold int init(AVCodecContext *avctx)
int ff_vaapi_decode_make_param_buffer(AVCodecContext *avctx, VAAPIDecodePicture *pic, int type, const void *data, size_t size)
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...
int extended_mv
Ext MV in P/B (not in Simple)
static VASurfaceID ff_vaapi_get_surface_id(AVFrame *pic)
int broadcast
TFF/RFF present.
uint8_t rangeredfrm
Frame decoding info for S/M profiles only.
static int vc1_has_SKIPMB_bitplane(const VC1Context *v)
Check whether the SKIPMB bitplane is present.
static int vc1_has_DIRECTMB_bitplane(const VC1Context *v)
Check whether the DIRECTMB bitplane is present.
int intcompfield
which of the two fields to be intensity compensated
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
MVModes
MV modes for P-frames.
int fastuvmc
Rounding of qpel vector to hpel ? (not in Simple)
int ff_vaapi_common_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx)
static av_unused int vc1_get_INTCOMPFIELD(const VC1Context *v)
void ff_mpeg_draw_horiz_band(MpegEncContext *s, int y, int h)
int refdist
distance of the current picture from reference
int ff_vaapi_decode_uninit(AVCodecContext *avctx)
static av_cold int uninit(AVCodecContext *avctx)
static int vc1_has_OVERFLAGS_bitplane(const VC1Context *v)
Check whether the OVERFLAGS bitplane is present.
int panscanflag
NUMPANSCANWIN, TOPLEFT{X,Y}, BOTRIGHT{X,Y} present.
int ff_vaapi_decode_issue(AVCodecContext *avctx, VAAPIDecodePicture *pic)
int interlace
Progressive/interlaced (RPTFTM syntax element)
int y_ac_table_index
Luma index from AC2FRM element.
int c_ac_table_index
AC coding set indexes.
int ttfrm
Transform type info present at frame level.
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
int profile
Sequence header data for all Profiles TODO: choose between ints, uint8_ts and monobit flags...
static av_unused int vc1_get_LUMSHIFT2(const VC1Context *v)
static int get_bits_count(const GetBitContext *s)
int refdist_flag
REFDIST syntax element present in II, IP, PI or PP field picture headers.
static int vc1_has_ACPRED_bitplane(const VC1Context *v)
Check whether the ACPRED bitplane is present.
int psf
Progressive Segmented Frame.
uint8_t ttmbf
Transform type flag.
static int get_VAMvModeVC1(enum MVModes mv_mode)
Translate FFmpeg MV modes to VA API.
int dmb_is_raw
direct mb plane is raw
int overlap
overlapped transforms in use
in the bitstream is reported as 11b
static int vaapi_vc1_end_frame(AVCodecContext *avctx)
int resync_marker
could this stream contain resync markers
uint8_t broken_link
Broken link flag (BROKEN_LINK syntax element)
static int vaapi_vc1_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)
const char * name
Name of the hardware accelerated codec.
int ff_vaapi_decode_init(AVCodecContext *avctx)
int tfcntrflag
TFCNTR present.
uint8_t mv_mode
Frame decoding info for all profiles.
Picture * current_picture_ptr
pointer to the current picture
void * hwaccel_picture_private
Hardware accelerator private data.
uint8_t lumscale
Luma compensation parameters.
uint8_t closed_entry
Closed entry point flag (CLOSED_ENTRY syntax element)
const AVHWAccel ff_vc1_vaapi_hwaccel
static VAMvModeVC1 vc1_get_MVMODE(const VC1Context *v)
Reconstruct bitstream MVMODE (7.1.1.32)
VASurfaceID output_surface
int rangered
RANGEREDFRM (range reduction) syntax element present at frame level.
static VAMvModeVC1 vc1_get_MVMODE2(const VC1Context *v)
Reconstruct bitstream MVMODE2 (7.1.1.33)
int finterpflag
INTERPFRM present.
const AVHWAccel ff_wmv3_vaapi_hwaccel
static int vc1_get_FPTYPE(const VC1Context *v)
Reconstruct bitstream FPTYPE (9.1.1.42, index into Table-105)
static av_unused int vc1_get_LUMSCALE2(const VC1Context *v)
int multires
frame-level RESPIC syntax element present
main external API structure.
int extended_dmv
Additional extended dmv range at P/B-frame-level.
int fmb_is_raw
forward mb plane is raw
uint8_t respic
Frame-level flag for resized images.
int skip_is_raw
skip mb plane is not coded
int quantizer_mode
2 bits, quantizer mode used for sequence, see QUANT_*
static int vc1_has_MVTYPEMB_bitplane(const VC1Context *v)
Check whether the MVTYPEMB bitplane is present.
uint8_t mvrange
Ranges:0 -> [-64n 63.f] x [-32, 31.f]1 -> [-128, 127.f] x [-64, 63.f]2 -> [-512, 511.f] x [-128, 127.f]3 -> [-1024, 1023.f] x [-256, 255.f].
int pict_type
AV_PICTURE_TYPE_I, AV_PICTURE_TYPE_P, AV_PICTURE_TYPE_B, ...
int ff_vaapi_decode_cancel(AVCodecContext *avctx, VAAPIDecodePicture *pic)
int vstransform
variable-size [48]x[48] transform type + info
int numref
number of past field pictures used as reference
static void vc1_pack_bitplanes(uint8_t *bitplane, int n, const uint8_t *ff_bp[3], int x, int y, int stride)
Pack FFmpeg bitplanes into a VABitPlaneBuffer element.
static int vc1_get_LUMSHIFT(const VC1Context *v)
static int vc1_get_LUMSCALE(const VC1Context *v)
in the bitstream is reported as 10b
struct AVCodecContext * avctx
GLint GLenum GLboolean GLsizei stride
common internal api header.
enum FrameCodingMode fcm
Frame decoding info for Advanced profile.
uint8_t dquantfrm
pquant parameters
#define HWACCEL_CAP_ASYNC_SAFE
uint8_t pquantizer
Uniform (over sequence) quantizer in use.
static int vc1_get_TTFRM(const VC1Context *v)
Reconstruct bitstream TTFRM (7.1.1.41, Table-53)
int dquant
How qscale varies with MBs, 2 bits (not in Simple)
uint8_t mv_mode2
Secondary MV coding mode (B-frames)
static int vaapi_vc1_start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size)
int ff_vaapi_decode_make_slice_buffer(AVCodecContext *avctx, VAAPIDecodePicture *pic, const void *params_data, size_t params_size, const void *slice_data, size_t slice_size)
uint8_t halfpq
Uniform quant over image and qp+.5.
static int vc1_has_FORWARDMB_bitplane(const VC1Context *v)
Check whether the FORWARDMB bitplane is present.
uint8_t altpq
Current/alternate frame quantizer scale.