134 const int bitplane_index = n / 2;
135 const int ff_bp_index = y * stride +
x;
138 v = ff_bp[0][ff_bp_index];
140 v |= ff_bp[1][ff_bp_index] << 1;
142 v |= ff_bp[2][ff_bp_index] << 2;
143 bitplane[bitplane_index] = (bitplane[bitplane_index] << 4) | v;
151 VAPictureParameterBufferVC1 *pic_param;
153 av_dlog(avctx,
"vaapi_vc1_start_frame()\n");
161 pic_param->forward_reference_picture = VA_INVALID_ID;
162 pic_param->backward_reference_picture = VA_INVALID_ID;
163 pic_param->inloop_decoded_picture = VA_INVALID_ID;
164 pic_param->sequence_fields.value = 0;
165 pic_param->sequence_fields.bits.pulldown = v->
broadcast;
166 pic_param->sequence_fields.bits.interlace = v->
interlace;
167 pic_param->sequence_fields.bits.tfcntrflag = v->
tfcntrflag;
168 pic_param->sequence_fields.bits.finterpflag = v->
finterpflag;
169 pic_param->sequence_fields.bits.psf = v->
psf;
170 pic_param->sequence_fields.bits.multires = v->
multires;
171 pic_param->sequence_fields.bits.overlap = v->
overlap;
172 pic_param->sequence_fields.bits.syncmarker = s->
resync_marker;
173 pic_param->sequence_fields.bits.rangered = v->
rangered;
175 #if VA_CHECK_VERSION(0,32,0) 176 pic_param->sequence_fields.bits.profile = v->
profile;
180 pic_param->entrypoint_fields.value = 0;
181 pic_param->entrypoint_fields.bits.broken_link = v->
broken_link;
182 pic_param->entrypoint_fields.bits.closed_entry = v->
closed_entry;
183 pic_param->entrypoint_fields.bits.panscan_flag = v->
panscanflag;
184 pic_param->entrypoint_fields.bits.loopfilter = s->
loop_filter;
185 pic_param->conditional_overlap_flag = v->
condover;
186 pic_param->fast_uvmc_flag = v->
fastuvmc;
187 pic_param->range_mapping_fields.value = 0;
189 pic_param->range_mapping_fields.bits.luma = v->
range_mapy;
191 pic_param->range_mapping_fields.bits.chroma = v->
range_mapuv;
194 pic_param->mb_mode_table = 0;
196 pic_param->rounding_control = v->
rnd;
197 pic_param->post_processing = v->
postproc;
198 pic_param->picture_resolution_index = v->
respic;
199 pic_param->luma_scale = v->
lumscale;
200 pic_param->luma_shift = v->
lumshift;
201 pic_param->picture_fields.value = 0;
202 pic_param->picture_fields.bits.picture_type =
vc1_get_PTYPE(v);
203 pic_param->picture_fields.bits.frame_coding_mode = v->
fcm;
204 pic_param->picture_fields.bits.top_field_first = v->
tff;
205 pic_param->picture_fields.bits.is_first_field = v->
fcm == 0;
207 pic_param->raw_coding.value = 0;
209 pic_param->raw_coding.flags.direct_mb = v->
dmb_is_raw;
210 pic_param->raw_coding.flags.skip_mb = v->
skip_is_raw;
211 pic_param->raw_coding.flags.field_tx = 0;
212 pic_param->raw_coding.flags.forward_mb = 0;
215 pic_param->bitplane_present.value = 0;
219 pic_param->bitplane_present.flags.bp_field_tx = 0;
220 pic_param->bitplane_present.flags.bp_forward_mb = 0;
223 pic_param->reference_fields.value = 0;
224 pic_param->reference_fields.bits.reference_distance_flag = v->
refdist_flag;
225 pic_param->reference_fields.bits.reference_distance = 0;
226 pic_param->reference_fields.bits.num_reference_pictures = 0;
227 pic_param->reference_fields.bits.reference_field_pic_indicator = 0;
228 pic_param->mv_fields.value = 0;
232 pic_param->mv_fields.bits.two_mv_block_pattern_table = 0;
233 pic_param->mv_fields.bits.four_mv_switch = 0;
234 pic_param->mv_fields.bits.four_mv_block_pattern_table = 0;
235 pic_param->mv_fields.bits.extended_mv_flag = v->
extended_mv;
236 pic_param->mv_fields.bits.extended_mv_range = v->
mvrange;
237 pic_param->mv_fields.bits.extended_dmv_flag = v->
extended_dmv;
238 pic_param->mv_fields.bits.extended_dmv_range = 0;
239 pic_param->pic_quantizer_fields.value = 0;
240 pic_param->pic_quantizer_fields.bits.dquant = v->
dquant;
241 pic_param->pic_quantizer_fields.bits.quantizer = v->
quantizer_mode;
242 pic_param->pic_quantizer_fields.bits.half_qp = v->
halfpq;
243 pic_param->pic_quantizer_fields.bits.pic_quantizer_scale = v->
pq;
244 pic_param->pic_quantizer_fields.bits.pic_quantizer_type = v->
pquantizer;
245 pic_param->pic_quantizer_fields.bits.dq_frame = v->
dquantfrm;
246 pic_param->pic_quantizer_fields.bits.dq_profile = v->
dqprofile;
249 pic_param->pic_quantizer_fields.bits.dq_binary_level = v->
dqbilevel;
250 pic_param->pic_quantizer_fields.bits.alt_pic_quantizer = v->
altpq;
251 pic_param->transform_fields.value = 0;
252 pic_param->transform_fields.bits.variable_sized_transform_flag = v->
vstransform;
253 pic_param->transform_fields.bits.mb_level_transform_type_flag = v->
ttmbf;
254 pic_param->transform_fields.bits.frame_level_transform_type =
vc1_get_TTFRM(v);
255 pic_param->transform_fields.bits.transform_ac_codingset_idx1 = v->
c_ac_table_index;
256 pic_param->transform_fields.bits.transform_ac_codingset_idx2 = v->
y_ac_table_index;
257 pic_param->transform_fields.bits.intra_transform_dc_table = v->
s.
dc_table_index;
268 if (pic_param->bitplane_present.value) {
276 ff_bp[1] = pic_param->bitplane_present.flags.bp_skip_mb ? s->
mbskip_table :
NULL;
282 ff_bp[1] = pic_param->bitplane_present.flags.bp_skip_mb ? s->
mbskip_table :
NULL;
289 ff_bp[1] = pic_param->bitplane_present.flags.bp_ac_pred ? v->
acpred_plane :
NULL;
305 for (x = 0; x < s->
mb_width; x++, n++)
317 VASliceParameterBufferVC1 *slice_param;
319 av_dlog(avctx,
"vaapi_vc1_decode_slice(): buffer %p, size %d\n", buffer, size);
332 slice_param->slice_vertical_position = s->
mb_y;
336 #if CONFIG_WMV3_VAAPI_HWACCEL 338 .
name =
"wmv3_vaapi",
uint8_t bfraction_lut_index
Index for BFRACTION value (see Table 40, reproduced into ff_vc1_bfraction_lut[])
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
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)
int broadcast
TFF/RFF present.
uint8_t rangeredfrm
Frame decoding info for S/M profiles only.
HW decoding through VA API, Picture.data[3] contains a vaapi_render_state struct which contains the b...
av_dlog(ac->avr,"%d samples - audio_convert: %s to %s (%s)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt), use_generic?ac->func_descr_generic:ac->func_descr)
This structure is used to share data between the FFmpeg library and the client video application...
static int vc1_has_ACPRED_bitplane(VC1Context *v)
Check whether the ACPRED bitplane is present.
MVModes
MV modes for P frames.
int fastuvmc
Rounding of qpel vector to hpel ? (not in Simple)
static int vc1_get_PTYPE(VC1Context *v)
Reconstruct bitstream PTYPE (7.1.1.4, index into Table-35)
uint8_t * acpred_plane
AC prediction flags bitplane.
void * hwaccel_context
Hardware accelerator context.
int panscanflag
NUMPANSCANWIN, TOPLEFT{X,Y}, BOTRIGHT{X,Y} present.
VLC ff_vc1_cbpcy_p_vlc[4]
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.
int resync_marker
could this stream contain resync markers
int profile
Sequence header data for all Profiles TODO: choose between ints, uint8_ts and monobit flags...
static int vc1_has_DIRECTMB_bitplane(VC1Context *v)
Check whether the DIRECTMB bitplane is present.
static int get_bits_count(const GetBitContext *s)
int refdist_flag
REFDIST syntax element present in II, IP, PI or PP field picture headers.
int mb_height
number of MBs horizontally & vertically
uint8_t * over_flags_plane
Overflags bitplane.
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
void * ff_vaapi_alloc_pic_param(struct vaapi_context *vactx, unsigned int size)
Allocate a new picture parameter buffer.
static int vc1_has_OVERFLAGS_bitplane(VC1Context *v)
Check whether the OVERFLAGS bitplane is present.
#define IS_MARKER(state, i, buf, buf_size)
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.
static int vc1_has_SKIPMB_bitplane(VC1Context *v)
Check whether the SKIPMB bitplane is present.
int tfcntrflag
TFCNTR present.
uint8_t * mbskip_table
used to avoid copy if macroblock skipped (for black regions for example) and used for b-frame encodin...
uint8_t mv_mode
Frame decoding info for all profiles.
static int vc1_get_TTFRM(VC1Context *v)
Reconstruct bitstream TTFRM (7.1.1.41, Table-53)
unsigned int slice_param_size
Size of a VASliceParameterBuffer element.
uint8_t lumscale
Luma compensation parameters.
static VAMvModeVC1 vc1_get_MVMODE2(VC1Context *v)
Reconstruct bitstream MVMODE2 (7.1.1.33)
uint8_t closed_entry
Closed entry point flag (CLOSED_ENTRY syntax element)
static VAMvModeVC1 vc1_get_MVMODE(VC1Context *v)
Reconstruct bitstream MVMODE (7.1.1.32)
VLC * cbpcy_vlc
CBPCY VLC table.
int rangered
RANGEREDFRM (range reduction) syntax element present at frame level.
int finterpflag
INTERPFRM present.
static int vc1_has_MVTYPEMB_bitplane(VC1Context *v)
Check whether the MVTYPEMB bitplane is present.
int multires
frame-level RESPIC syntax element present
main external API structure.
VASliceParameterBufferBase * ff_vaapi_alloc_slice(struct vaapi_context *vactx, const uint8_t *buffer, uint32_t size)
Allocate a new slice descriptor for the input slice.
int extended_dmv
Additional extended dmv range at P/B frame-level.
uint8_t respic
Frame-level flag for resized images.
int skip_is_raw
skip mb plane is not coded
int quantizer_mode
2bits, quantizer mode used for sequence, see QUANT_*
uint8_t * direct_mb_plane
bitplane for "direct" MBs
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, ...
uint8_t * mv_type_mb_plane
bitplane for mv_type == (4MV)
int vstransform
variable-size [48]x[48] transform type + info
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.
struct AVCodecContext * avctx
int mb_stride
mb_width+1 used for some arrays to allow simple addressing of left & top MBs without sig11 ...
enum FrameCodingMode fcm
Frame decoding info for Advanced profile.
Picture last_picture
copy of the previous picture structure.
uint8_t dquantfrm
pquant parameters
the buffer and buffer reference mechanism is intended to as much as expensive copies of that data while still allowing the filters to produce correct results The data is stored in buffers represented by AVFilterBuffer structures They must not be accessed but through references stored in AVFilterBufferRef structures Several references can point to the same buffer
static VASurfaceID ff_vaapi_get_surface_id(Picture *pic)
Extract VASurfaceID from a Picture.
uint8_t pquantizer
Uniform (over sequence) quantizer in use.
Picture next_picture
copy of the next picture structure.
uint8_t * ff_vaapi_alloc_bitplane(struct vaapi_context *vactx, uint32_t size)
Allocate a new bit-plane buffer.
AVHWAccel ff_vc1_vaapi_hwaccel
int ff_vaapi_mpeg_end_frame(AVCodecContext *avctx)
int dquant
How qscale varies with MBs, 2bits (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)
uint8_t halfpq
Uniform quant over image and qp+.5.
uint8_t altpq
Current/alternate frame quantizer scale.