118 switch (
s->pict_type) {
130 switch (
s->pict_type) {
238 const int bitplane_index = n / 2;
239 const int ff_bp_index = y *
stride + x;
242 v = ff_bp[0][ff_bp_index];
244 v |= ff_bp[1][ff_bp_index] << 1;
246 v |= ff_bp[2][ff_bp_index] << 2;
247 bitplane[bitplane_index] = (bitplane[bitplane_index] << 4) | v;
255 VAPictureParameterBufferVC1 pic_param;
260 pic_param = (VAPictureParameterBufferVC1) {
261 .forward_reference_picture = VA_INVALID_ID,
262 .backward_reference_picture = VA_INVALID_ID,
263 .inloop_decoded_picture = VA_INVALID_ID,
264 .sequence_fields.bits = {
274 .max_b_frames =
s->avctx->max_b_frames,
277 .coded_width =
s->avctx->coded_width,
278 .coded_height =
s->avctx->coded_height,
279 .entrypoint_fields.bits = {
283 .loopfilter =
s->loop_filter,
285 .conditional_overlap_flag = v->
condover,
287 .range_mapping_fields.bits = {
297 .rounding_control = v->
rnd,
299 .picture_resolution_index = v->
respic,
300 .picture_fields.bits = {
302 .frame_coding_mode = v->
fcm,
303 .top_field_first = v->
tff,
305 .intensity_compensation = v->
intcomp,
309 #if VA_CHECK_VERSION(1, 1, 0)
314 .raw_coding.flags = {
323 .bitplane_present.flags = {
332 .reference_fields.bits = {
334 .reference_distance = v->
refdist,
335 .num_reference_pictures = v->
numref,
336 .reference_field_pic_indicator = v->
reffield,
346 .extended_mv_range = v->
mvrange,
350 .pic_quantizer_fields.bits = {
354 .pic_quantizer_scale = v->
pq,
361 .alt_pic_quantizer = v->
altpq,
363 .transform_fields.bits = {
365 .mb_level_transform_type_flag = v->
ttmbf,
373 switch (
s->pict_type) {
383 VAPictureParameterBufferType,
384 &pic_param,
sizeof(pic_param));
388 if (pic_param.bitplane_present.value & 0x7f) {
392 size_t size = (
s->mb_width *
s->mb_height + 1) / 2;
400 switch (
s->pict_type) {
402 ff_bp[0] = pic_param.bitplane_present.flags.bp_direct_mb ? v->direct_mb_plane :
NULL;
403 ff_bp[1] = pic_param.bitplane_present.flags.bp_skip_mb ?
s->mbskip_table :
NULL;
404 ff_bp[2] = pic_param.bitplane_present.flags.bp_mv_type_mb ? v->mv_type_mb_plane :
NULL;
408 ff_bp[0] = pic_param.bitplane_present.flags.bp_direct_mb ? v->direct_mb_plane :
NULL;
409 ff_bp[1] = pic_param.bitplane_present.flags.bp_skip_mb ?
s->mbskip_table :
NULL;
410 ff_bp[2] = pic_param.bitplane_present.flags.bp_forward_mb ? v->forward_mb_plane :
NULL;
415 ff_bp[0] = pic_param.bitplane_present.flags.bp_field_tx ? v->fieldtx_plane :
NULL;
416 ff_bp[1] = pic_param.bitplane_present.flags.bp_ac_pred ? v->acpred_plane :
NULL;
417 ff_bp[2] = pic_param.bitplane_present.flags.bp_overflags ? v->over_flags_plane :
NULL;
427 for (y = 0; y <
s->mb_height; y++)
428 for (x = 0; x <
s->mb_width; x++, n++)
434 VABitPlaneBufferType,
469 VASliceParameterBufferVC1 slice_param;
484 slice_param = (VASliceParameterBufferVC1) {
485 .slice_data_size =
size,
486 .slice_data_offset = 0,
487 .slice_data_flag = VA_SLICE_DATA_FLAG_ALL,
489 .slice_vertical_position =
s->mb_y % mb_height,
493 &slice_param,
sizeof(slice_param),
503 #if CONFIG_WMV3_VAAPI_HWACCEL
505 .
name =
"wmv3_vaapi",
static av_cold int init(AVCodecContext *avctx)
static av_cold int uninit(AVCodecContext *avctx)
static int get_bits_count(const GetBitContext *s)
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
@ AV_PICTURE_TYPE_I
Intra.
@ AV_PICTURE_TYPE_P
Predicted.
@ AV_PICTURE_TYPE_B
Bi-dir predicted.
const AVHWAccel ff_wmv3_vaapi_hwaccel
#define HWACCEL_CAP_ASYNC_SAFE
common internal API header
void ff_mpeg_draw_horiz_band(MpegEncContext *s, int y, int h)
main external API structure.
const char * name
Name of the hardware accelerated codec.
int pict_type
AV_PICTURE_TYPE_I, AV_PICTURE_TYPE_P, AV_PICTURE_TYPE_B, ...
VASurfaceID output_surface
int tfcntrflag
TFCNTR present.
int profile
Sequence header data for all Profiles TODO: choose between ints, uint8_ts and monobit flags.
uint8_t bfraction_lut_index
Index for BFRACTION value (see Table 40, reproduced into ff_vc1_bfraction_lut[])
int skip_is_raw
skip mb plane is not coded
int dquant
How qscale varies with MBs, 2 bits (not in Simple)
int reffield
if numref = 0 (1 reference) then reffield decides which
int multires
frame-level RESPIC syntax element present
uint8_t ttmbf
Transform type flag.
int finterpflag
INTERPFRM present.
int extended_mv
Ext MV in P/B (not in Simple)
uint8_t pquantizer
Uniform (over sequence) quantizer in use.
uint8_t altpq
Current/alternate frame quantizer scale.
int extended_dmv
Additional extended dmv range at P/B-frame-level.
int panscanflag
NUMPANSCANWIN, TOPLEFT{X,Y}, BOTRIGHT{X,Y} present.
uint8_t mv_mode2
Secondary MV coding mode (B-frames)
int psf
Progressive Segmented Frame.
int refdist
distance of the current picture from reference
uint8_t broken_link
Broken link flag (BROKEN_LINK syntax element)
uint8_t rangeredfrm
Frame decoding info for S/M profiles only.
int quantizer_mode
2 bits, quantizer mode used for sequence, see QUANT_*
int broadcast
TFF/RFF present.
int refdist_flag
REFDIST syntax element present in II, IP, PI or PP field picture headers.
int overlap
overlapped transforms in use
int fmb_is_raw
forward mb plane is raw
uint8_t closed_entry
Closed entry point flag (CLOSED_ENTRY syntax element)
int intcompfield
which of the two fields to be intensity compensated
uint8_t dmvrange
Frame decoding info for interlaced picture.
uint8_t mv_mode
Frame decoding info for all profiles.
uint8_t dquantfrm
pquant parameters
int dmb_is_raw
direct mb plane is raw
enum FrameCodingMode fcm
Frame decoding info for Advanced profile.
int interlace
Progressive/interlaced (RPTFTM syntax element)
uint8_t lumscale
Luma compensation parameters.
int c_ac_table_index
AC coding set indexes.
uint8_t lumscale2
for interlaced field P picture
int resync_marker
could this stream contain resync markers
int ttfrm
Transform type info present at frame level.
int y_ac_table_index
Luma index from AC2FRM element.
uint8_t halfpq
Uniform quant over image and qp+.5.
uint8_t respic
Frame-level flag for resized images.
int fastuvmc
Rounding of qpel vector to hpel ? (not in Simple)
int mv_type_is_raw
mv type mb plane is not coded
int numref
number of past field pictures used as reference
int rangered
RANGEREDFRM (range reduction) syntax element present at frame level.
int vstransform
variable-size [48]x[48] transform type + info
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)
int ff_vaapi_decode_make_param_buffer(AVCodecContext *avctx, VAAPIDecodePicture *pic, int type, const void *data, size_t size)
int ff_vaapi_common_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx)
int ff_vaapi_decode_issue(AVCodecContext *avctx, VAAPIDecodePicture *pic)
int ff_vaapi_decode_init(AVCodecContext *avctx)
int ff_vaapi_decode_uninit(AVCodecContext *avctx)
int ff_vaapi_decode_cancel(AVCodecContext *avctx, VAAPIDecodePicture *pic)
static VASurfaceID ff_vaapi_get_surface_id(AVFrame *pic)
static int get_VAMvModeVC1(enum MVModes mv_mode)
Translate FFmpeg MV modes to VA API.
static int vc1_get_LUMSCALE(const VC1Context *v)
static int vc1_has_OVERFLAGS_bitplane(const VC1Context *v)
Check whether the OVERFLAGS bitplane is present.
static int vc1_get_PTYPE(const VC1Context *v)
Reconstruct bitstream PTYPE (7.1.1.4, index into Table-35)
static int vaapi_vc1_end_frame(AVCodecContext *avctx)
static av_unused int vc1_get_LUMSHIFT2(const VC1Context *v)
static av_unused int vc1_get_LUMSCALE2(const VC1Context *v)
static int vaapi_vc1_start_frame(AVCodecContext *avctx, av_unused const uint8_t *buffer, av_unused uint32_t size)
static int vc1_has_SKIPMB_bitplane(const VC1Context *v)
Check whether the SKIPMB bitplane is present.
static av_unused int vc1_get_INTCOMPFIELD(const VC1Context *v)
static VAMvModeVC1 vc1_get_MVMODE2(const VC1Context *v)
Reconstruct bitstream MVMODE2 (7.1.1.33)
static int vaapi_vc1_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size)
const AVHWAccel ff_vc1_vaapi_hwaccel
static int vc1_get_TTFRM(const VC1Context *v)
Reconstruct bitstream TTFRM (7.1.1.41, Table-53)
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_has_MVTYPEMB_bitplane(const VC1Context *v)
Check whether the MVTYPEMB bitplane is present.
static int vc1_has_DIRECTMB_bitplane(const VC1Context *v)
Check whether the DIRECTMB bitplane is present.
static int vc1_has_ACPRED_bitplane(const VC1Context *v)
Check whether the ACPRED bitplane is present.
static int vc1_has_FORWARDMB_bitplane(const VC1Context *v)
Check whether the FORWARDMB bitplane is present.
static int vc1_get_LUMSHIFT(const VC1Context *v)
static VAMvModeVC1 vc1_get_MVMODE(const VC1Context *v)
Reconstruct bitstream MVMODE (7.1.1.32)
static int vc1_get_FPTYPE(const VC1Context *v)
Reconstruct bitstream FPTYPE (9.1.1.42, index into Table-105)
static int vc1_has_FIELDTX_bitplane(const VC1Context *v)
Check whether the FIELDTX bitplane is present.
@ PROGRESSIVE
in the bitstream is reported as 00b
@ ILACE_FIELD
in the bitstream is reported as 11b
@ ILACE_FRAME
in the bitstream is reported as 10b
MVModes
MV modes for P-frames.
@ MV_PMODE_INTENSITY_COMP
@ MV_PMODE_1MV_HPEL_BILIN