1 | /* |
2 | * Copyright (c) 2007-2015 Intel Corporation. All Rights Reserved. |
3 | * |
4 | * Permission is hereby granted, free of charge, to any person obtaining a |
5 | * copy of this software and associated documentation files (the |
6 | * "Software"), to deal in the Software without restriction, including |
7 | * without limitation the rights to use, copy, modify, merge, publish, |
8 | * distribute, sub license, and/or sell copies of the Software, and to |
9 | * permit persons to whom the Software is furnished to do so, subject to |
10 | * the following conditions: |
11 | * |
12 | * The above copyright notice and this permission notice (including the |
13 | * next paragraph) shall be included in all copies or substantial portions |
14 | * of the Software. |
15 | * |
16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
17 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
18 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. |
19 | * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR |
20 | * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
21 | * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
22 | * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
23 | */ |
24 | |
25 | /** |
26 | * \file va_enc_vp9.h |
27 | * \brief VP9 encoding API |
28 | * |
29 | * This file contains the \ref api_enc_vp9 "VP9 encoding API". |
30 | * |
31 | */ |
32 | |
33 | #ifndef VA_ENC_VP9_H |
34 | #define VA_ENC_VP9_H |
35 | |
36 | #ifdef __cplusplus |
37 | extern "C" { |
38 | #endif |
39 | |
40 | /** |
41 | * \defgroup api_enc_vp9 VP9 encoding API |
42 | * |
43 | * @{ |
44 | */ |
45 | |
46 | /** |
47 | * \brief VP9 Encoding Status Data Buffer Structure |
48 | * |
49 | * This structure is used to convey status data from encoder to application. |
50 | * Driver allocates VACodedBufferVP9Status as a private data buffer. |
51 | * Driver encapsulates the status buffer with a VACodedBufferSegment, |
52 | * and sets VACodedBufferSegment.status to be VA_CODED_BUF_STATUS_CODEC_SPECIFIC. |
53 | * And driver associates status data segment to the bit stream buffer segment |
54 | * by setting VACodedBufferSegment.next of coded_buf (bit stream) to the private |
55 | * buffer segment of status data. |
56 | * Application accesses it by calling VAMapBuffer() with VAEncCodedBufferType. |
57 | */ |
58 | typedef struct _VACodedBufferVP9Status { |
59 | /** Final quantization index used (yac), determined by BRC. |
60 | * Application is providing quantization index deltas |
61 | * ydc(0), y2dc(1), y2ac(2), uvdc(3), uvac(4) that are applied to all segments |
62 | * and segmentation qi deltas, they will not be changed by BRC. |
63 | */ |
64 | uint16_t base_qp_index; |
65 | |
66 | /** Final loopfilter levels for the frame, if segmentation is disabled only |
67 | * index 0 is used. |
68 | * If loop_filter_level is 0, it indicates loop filter is disabled. |
69 | */ |
70 | uint8_t loop_filter_level; |
71 | |
72 | /** |
73 | * Long term reference frame indication from BRC. BRC recommends the |
74 | * current frame that is being queried is a good candidate for a long |
75 | * term reference. |
76 | */ |
77 | uint8_t long_term_indication; |
78 | |
79 | /* suggested next frame width */ |
80 | uint16_t next_frame_width; |
81 | |
82 | /* suggested next frame height */ |
83 | uint16_t next_frame_height; |
84 | |
85 | /** \brief Reserved bytes for future use, must be zero */ |
86 | uint32_t va_reserved[VA_PADDING_LOW]; |
87 | } VACodedBufferVP9Status; |
88 | |
89 | /** |
90 | * \brief VP9 Encoding Sequence Parameter Buffer Structure |
91 | * |
92 | * This structure conveys sequence level parameters. |
93 | * |
94 | */ |
95 | typedef struct _VAEncSequenceParameterBufferVP9 { |
96 | /** \brief Frame size note: |
97 | * Picture resolution may change frame by frame. |
98 | * Application needs to allocate surfaces and frame buffers based on |
99 | * max frame resolution in case resolution changes for later frames. |
100 | * The source and recon surfaces allocated should be 64x64(SB) aligned |
101 | * on both horizontal and vertical directions. |
102 | * But buffers on the surfaces need to be aligned to CU boundaries. |
103 | */ |
104 | /* maximum frame width in pixels for the whole sequence */ |
105 | uint32_t max_frame_width; |
106 | |
107 | /* maximum frame height in pixels for the whole sequence */ |
108 | uint32_t max_frame_height; |
109 | |
110 | /* auto keyframe placement, non-zero means enable auto keyframe placement */ |
111 | uint32_t kf_auto; |
112 | |
113 | /* keyframe minimum interval */ |
114 | uint32_t kf_min_dist; |
115 | |
116 | /* keyframe maximum interval */ |
117 | uint32_t kf_max_dist; |
118 | |
119 | |
120 | /* RC related fields. RC modes are set with VAConfigAttribRateControl */ |
121 | /* For VP9, CBR implies HRD conformance and VBR implies no HRD conformance */ |
122 | |
123 | /** |
124 | * Initial bitrate set for this sequence in CBR or VBR modes. |
125 | * |
126 | * This field represents the initial bitrate value for this |
127 | * sequence if CBR or VBR mode is used, i.e. if the encoder |
128 | * pipeline was created with a #VAConfigAttribRateControl |
129 | * attribute set to either \ref VA_RC_CBR or \ref VA_RC_VBR. |
130 | * |
131 | * The bitrate can be modified later on through |
132 | * #VAEncMiscParameterRateControl buffers. |
133 | */ |
134 | uint32_t bits_per_second; |
135 | |
136 | /* Period between key frames */ |
137 | uint32_t intra_period; |
138 | |
139 | /** \brief Reserved bytes for future use, must be zero */ |
140 | uint32_t va_reserved[VA_PADDING_LOW]; |
141 | } VAEncSequenceParameterBufferVP9; |
142 | |
143 | |
144 | /** |
145 | * \brief VP9 Encoding Picture Parameter Buffer Structure |
146 | * |
147 | * This structure conveys picture level parameters. |
148 | * |
149 | */ |
150 | typedef struct _VAEncPictureParameterBufferVP9 { |
151 | /** VP9 encoder may support dynamic scaling function. |
152 | * If enabled (enable_dynamic_scaling is set), application may request |
153 | * GPU encodes picture with a different resolution from the raw source. |
154 | * GPU should handle the scaling process of source and |
155 | * all reference frames. |
156 | */ |
157 | /* raw source frame width in pixels */ |
158 | uint32_t frame_width_src; |
159 | /* raw source frame height in pixels */ |
160 | uint32_t frame_height_src; |
161 | |
162 | /* to be encoded frame width in pixels */ |
163 | uint32_t frame_width_dst; |
164 | /* to be encoded frame height in pixels */ |
165 | uint32_t frame_height_dst; |
166 | |
167 | /* surface to store reconstructed frame, not used for enc only case */ |
168 | VASurfaceID reconstructed_frame; |
169 | |
170 | /** \brief reference frame buffers |
171 | * Each entry of the array specifies the surface index of the picture |
172 | * that is referred by current picture or will be referred by any future |
173 | * picture. The valid entries take value from 0 to 127, inclusive. |
174 | * Non-valid entries, those do not point to pictures which are referred |
175 | * by current picture or future pictures, should take value 0xFF. |
176 | * Other values are not allowed. |
177 | * |
178 | * Application should update this array based on the refreshing |
179 | * information expected. |
180 | */ |
181 | VASurfaceID reference_frames[8]; |
182 | |
183 | /* buffer to store coded data */ |
184 | VABufferID coded_buf; |
185 | |
186 | union { |
187 | struct { |
188 | /* force this frame to be a keyframe */ |
189 | uint32_t force_kf : 1; |
190 | |
191 | /** \brief Indiates which frames to be used as reference. |
192 | * (Ref_frame_ctrl & 0x01) ? 1: last frame as reference frame, 0: not. |
193 | * (Ref_frame_ctrl & 0x02) ? 1: golden frame as reference frame, 0: not. |
194 | * (Ref_frame_ctrl & 0x04) ? 1: alt frame as reference frame, 0: not. |
195 | * L0 is for forward prediction. |
196 | * L1 is for backward prediction. |
197 | */ |
198 | uint32_t ref_frame_ctrl_l0 : 3; |
199 | uint32_t ref_frame_ctrl_l1 : 3; |
200 | |
201 | /** \brief Last Reference Frame index |
202 | * Specifies the index to RefFrameList[] which points to the LAST |
203 | * reference frame. It corresponds to active_ref_idx[0] in VP9 code. |
204 | */ |
205 | uint32_t ref_last_idx : 3; |
206 | |
207 | /** \brief Specifies the Sign Bias of the LAST reference frame. |
208 | * It corresponds to ref_frame_sign_bias[LAST_FRAME] in VP9 code. |
209 | */ |
210 | uint32_t ref_last_sign_bias : 1; |
211 | |
212 | /** \brief GOLDEN Reference Frame index |
213 | * Specifies the index to RefFrameList[] which points to the Golden |
214 | * reference frame. It corresponds to active_ref_idx[1] in VP9 code. |
215 | */ |
216 | uint32_t ref_gf_idx : 3; |
217 | |
218 | /** \brief Specifies the Sign Bias of the GOLDEN reference frame. |
219 | * It corresponds to ref_frame_sign_bias[GOLDEN_FRAME] in VP9 code. |
220 | */ |
221 | uint32_t ref_gf_sign_bias : 1; |
222 | |
223 | /** \brief Alternate Reference Frame index |
224 | * Specifies the index to RefFrameList[] which points to the Alternate |
225 | * reference frame. It corresponds to active_ref_idx[2] in VP9 code. |
226 | */ |
227 | uint32_t ref_arf_idx : 3; |
228 | |
229 | /** \brief Specifies the Sign Bias of the ALTERNATE reference frame. |
230 | * It corresponds to ref_frame_sign_bias[ALTREF_FRAME] in VP9 code. |
231 | */ |
232 | uint32_t ref_arf_sign_bias : 1; |
233 | |
234 | /* The temporal id the frame belongs to */ |
235 | uint32_t temporal_id : 8; |
236 | |
237 | uint32_t reserved : 5; |
238 | } bits; |
239 | uint32_t value; |
240 | } ref_flags; |
241 | |
242 | union { |
243 | struct { |
244 | /** |
245 | * Indicates if the current frame is a key frame or not. |
246 | * Corresponds to the same VP9 syntax element in frame tag. |
247 | */ |
248 | uint32_t frame_type : 1; |
249 | |
250 | /** \brief show_frame |
251 | * 0: current frame is not for display |
252 | * 1: current frame is for display |
253 | */ |
254 | uint32_t show_frame : 1; |
255 | |
256 | /** |
257 | * The following fields correspond to the same VP9 syntax elements |
258 | * in the frame header. |
259 | */ |
260 | uint32_t error_resilient_mode : 1; |
261 | |
262 | /** \brief Indicate intra-only for inter pictures. |
263 | * Must be 0 for key frames. |
264 | * 0: inter frame use both intra and inter blocks |
265 | * 1: inter frame use only intra blocks. |
266 | */ |
267 | uint32_t intra_only : 1; |
268 | |
269 | /** \brief Indicate high precision mode for Motion Vector prediction |
270 | * 0: normal mode |
271 | * 1: high precision mode |
272 | */ |
273 | uint32_t allow_high_precision_mv : 1; |
274 | |
275 | /** \brief Motion Compensation Filter type |
276 | * 0: eight-tap (only this mode is supported now.) |
277 | * 1: eight-tap-smooth |
278 | * 2: eight-tap-sharp |
279 | * 3: bilinear |
280 | * 4: switchable |
281 | */ |
282 | uint32_t mcomp_filter_type : 3; |
283 | uint32_t frame_parallel_decoding_mode : 1; |
284 | uint32_t reset_frame_context : 2; |
285 | uint32_t refresh_frame_context : 1; |
286 | uint32_t frame_context_idx : 2; |
287 | uint32_t segmentation_enabled : 1; |
288 | |
289 | /* corresponds to variable temporal_update in VP9 code. |
290 | * Indicates whether Segment ID is from bitstream or from previous |
291 | * frame. |
292 | * 0: Segment ID from bitstream |
293 | * 1: Segment ID from previous frame |
294 | */ |
295 | uint32_t segmentation_temporal_update : 1; |
296 | |
297 | /* corresponds to variable update_mb_segmentation_map in VP9 code. |
298 | * Indicates how hardware determines segmentation ID |
299 | * 0: intra block - segment id is 0; |
300 | * inter block - segment id from previous frame |
301 | * 1: intra block - segment id from bitstream (app or GPU decides) |
302 | * inter block - depends on segmentation_temporal_update |
303 | */ |
304 | uint32_t segmentation_update_map : 1; |
305 | |
306 | /** \brief Specifies if the picture is coded in lossless mode. |
307 | * |
308 | * lossless_mode = base_qindex == 0 && y_dc_delta_q == 0 \ |
309 | * && uv_dc_delta_q == 0 && uv_ac_delta_q == 0; |
310 | * Where base_qindex, y_dc_delta_q, uv_dc_delta_q and uv_ac_delta_q |
311 | * are all variables in VP9 code. |
312 | * |
313 | * When enabled, tx_mode needs to be set to 4x4 only and all |
314 | * tu_size in CU record set to 4x4 for entire frame. |
315 | * Software also has to program such that final_qindex=0 and |
316 | * final_filter_level=0 following the Quant Scale and |
317 | * Filter Level Table in Segmentation State section. |
318 | * Hardware forces Hadamard Tx when this bit is set. |
319 | * When lossless_mode is on, BRC has to be turned off. |
320 | * 0: normal mode |
321 | * 1: lossless mode |
322 | */ |
323 | uint32_t lossless_mode : 1; |
324 | |
325 | /** \brief MV prediction mode. Corresponds to VP9 variable with same name. |
326 | * comp_prediction_mode = 0: single prediction ony, |
327 | * comp_prediction_mode = 1: compound prediction, |
328 | * comp_prediction_mode = 2: hybrid prediction |
329 | * |
330 | * Not mandatory. App may suggest the setting based on power or |
331 | * performance. Kernal may use it as a guildline and decide the proper |
332 | * setting on its own. |
333 | */ |
334 | uint32_t comp_prediction_mode : 2; |
335 | |
336 | /** \brief Indicate how segmentation is specified |
337 | * 0 application specifies segmentation partitioning and |
338 | * relevant parameters. |
339 | * 1 GPU may decide on segmentation. If application already |
340 | * provides segmentation information, GPU may choose to |
341 | * honor it and further split into more levels if possible. |
342 | */ |
343 | uint32_t auto_segmentation : 1; |
344 | |
345 | /** \brief Indicate super frame syntax should be inserted |
346 | * 0 current frame is not encapsulated in super frame structure |
347 | * 1 current fame is to be encapsulated in super frame structure. |
348 | * super frame index syntax will be inserted by encoder at |
349 | * the end of current frame. |
350 | */ |
351 | uint32_t super_frame_flag : 1; |
352 | |
353 | uint32_t reserved : 10; |
354 | } bits; |
355 | uint32_t value; |
356 | } pic_flags; |
357 | |
358 | /** \brief indicate which frames in DPB should be refreshed. |
359 | * same syntax and semantic as in VP9 code. |
360 | */ |
361 | uint8_t refresh_frame_flags; |
362 | |
363 | /** \brief Base Q index in the VP9 term. |
364 | * Added with per segment delta Q index to get Q index of Luma AC. |
365 | */ |
366 | uint8_t luma_ac_qindex; |
367 | |
368 | /** |
369 | * Q index delta from base Q index in the VP9 term for Luma DC. |
370 | */ |
371 | int8_t luma_dc_qindex_delta; |
372 | |
373 | /** |
374 | * Q index delta from base Q index in the VP9 term for Chroma AC. |
375 | */ |
376 | int8_t chroma_ac_qindex_delta; |
377 | |
378 | /** |
379 | * Q index delta from base Q index in the VP9 term for Chroma DC. |
380 | */ |
381 | int8_t chroma_dc_qindex_delta; |
382 | |
383 | /** \brief filter level |
384 | * Corresponds to the same VP9 syntax element in frame header. |
385 | */ |
386 | uint8_t filter_level; |
387 | |
388 | /** |
389 | * Controls the deblocking filter sensitivity. |
390 | * Corresponds to the same VP9 syntax element in frame header. |
391 | */ |
392 | uint8_t sharpness_level; |
393 | |
394 | /** \brief Loop filter level reference delta values. |
395 | * Contains a list of 4 delta values for reference frame based block-level |
396 | * loop filter adjustment. |
397 | * If no update, set to 0. |
398 | * value range [-63..63] |
399 | */ |
400 | int8_t ref_lf_delta[4]; |
401 | |
402 | /** \brief Loop filter level mode delta values. |
403 | * Contains a list of 4 delta values for coding mode based MB-level loop |
404 | * filter adjustment. |
405 | * If no update, set to 0. |
406 | * value range [-63..63] |
407 | */ |
408 | int8_t mode_lf_delta[2]; |
409 | |
410 | /** |
411 | * Offset from starting position of output bitstream in bits where |
412 | * ref_lf_delta[] should be inserted. This offset should cover any metadata |
413 | * ahead of uncompressed header in inserted bit stream buffer (the offset |
414 | * should be same as that for final output bitstream buffer). |
415 | * |
416 | * In BRC mode, always insert ref_lf_delta[] (This implies uncompressed |
417 | * header should have mode_ref_delta_enabled=1 and mode_ref_delta_update=1). |
418 | */ |
419 | uint16_t bit_offset_ref_lf_delta; |
420 | |
421 | /** |
422 | * Offset from starting position of output bitstream in bits where |
423 | * mode_lf_delta[] should be inserted. |
424 | * |
425 | * In BRC mode, always insert mode_lf_delta[] (This implies uncompressed |
426 | * header should have mode_ref_delta_enabled=1 and mode_ref_delta_update=1). |
427 | */ |
428 | uint16_t bit_offset_mode_lf_delta; |
429 | |
430 | /** |
431 | * Offset from starting position of output bitstream in bits where (loop) |
432 | * filter_level should be inserted. |
433 | */ |
434 | uint16_t bit_offset_lf_level; |
435 | |
436 | /** |
437 | * Offset from starting position of output bitstream in bits where |
438 | * Base Qindex should be inserted. |
439 | */ |
440 | uint16_t bit_offset_qindex; |
441 | |
442 | /** |
443 | * Offset from starting position of output bitstream in bits where |
444 | * First Partition Size should be inserted. |
445 | */ |
446 | uint16_t bit_offset_first_partition_size; |
447 | |
448 | /** |
449 | * Offset from starting position of output bitstream in bits where |
450 | * segmentation_enabled is located in bitstream. When auto_segmentation |
451 | * is enabled, GPU uses this offset to locate and update the |
452 | * segmentation related information. |
453 | */ |
454 | uint16_t bit_offset_segmentation; |
455 | |
456 | /** \brief length in bit of segmentation portion from the location |
457 | * in bit stream where segmentation_enabled syntax is coded. |
458 | * When auto_segmentation is enabled, GPU uses this bit size to locate |
459 | * and update the information after segmentation. |
460 | */ |
461 | uint16_t bit_size_segmentation; |
462 | |
463 | |
464 | /** \brief log2 of number of tile rows |
465 | * Corresponds to the same VP9 syntax element in frame header. |
466 | * value range [0..2] |
467 | */ |
468 | uint8_t log2_tile_rows; |
469 | |
470 | /** \brief log2 of number of tile columns |
471 | * Corresponds to the same VP9 syntax element in frame header. |
472 | * value range [0..6] |
473 | */ |
474 | uint8_t log2_tile_columns; |
475 | |
476 | /** \brief indicate frame-skip happens |
477 | * Application may choose to drop/skip one or mulitple encoded frames or |
478 | * to-be-encoded frame due to various reasons such as insufficient |
479 | * bandwidth. |
480 | * Application uses the following three flags to inform GPU about frame-skip. |
481 | * |
482 | * value range of skip_frame_flag: [0..2] |
483 | * 0 - encode as normal, no skip; |
484 | * 1 - one or more frames were skipped by application prior to the |
485 | * current frame. Encode the current frame as normal. The driver |
486 | * will pass the number_skip_frames and skip_frames_size |
487 | * to bit rate control for adjustment. |
488 | * 2 - the current frame is to be skipped. Do not encode it but encrypt |
489 | * the packed header contents. This is for the secure encoding case |
490 | * where application generates a frame of all skipped blocks. |
491 | * The packed header will contain the skipped frame. |
492 | */ |
493 | uint8_t skip_frame_flag; |
494 | |
495 | /** \brief The number of frames skipped prior to the current frame. |
496 | * It includes only the skipped frames that were not counted before, |
497 | * and does not include the frame with skip_frame_flag == 2. |
498 | * Valid when skip_frame_flag = 1. |
499 | */ |
500 | uint8_t number_skip_frames; |
501 | |
502 | /** \brief When skip_frame_flag = 1, the size of the skipped frames in bits. |
503 | * It includes only the skipped frames that were not counted before, |
504 | * and does not include the frame size with skip_frame_flag = 2. |
505 | * When skip_frame_flag = 2, it is the size of the current skipped frame |
506 | * that is to be encrypted. |
507 | */ |
508 | uint32_t skip_frames_size; |
509 | |
510 | /** \brief Reserved bytes for future use, must be zero */ |
511 | uint32_t va_reserved[VA_PADDING_MEDIUM]; |
512 | } VAEncPictureParameterBufferVP9; |
513 | |
514 | |
515 | /** |
516 | * \brief Per segment parameters |
517 | */ |
518 | typedef struct _VAEncSegParamVP9 { |
519 | union { |
520 | struct { |
521 | /** \brief Indicates if per segment reference frame indicator is enabled. |
522 | * Corresponding to variable feature_enabled when |
523 | * j == SEG_LVL_REF_FRAME in function setup_segmentation() VP9 code. |
524 | */ |
525 | uint8_t segment_reference_enabled : 1; |
526 | |
527 | /** \brief Specifies per segment reference indication. |
528 | * 0: reserved |
529 | * 1: Last ref |
530 | * 2: golden |
531 | * 3: altref |
532 | * Value can be derived from variable data when |
533 | * j == SEG_LVL_REF_FRAME in function setup_segmentation() VP9 code. |
534 | * value range: [0..3] |
535 | */ |
536 | uint8_t segment_reference : 2; |
537 | |
538 | /** \brief Indicates if per segment skip mode is enabled. |
539 | * Corresponding to variable feature_enabled when |
540 | * j == SEG_LVL_SKIP in function setup_segmentation() VP9 code. |
541 | */ |
542 | uint8_t segment_reference_skipped : 1; |
543 | |
544 | uint8_t reserved : 4; |
545 | |
546 | } bits; |
547 | uint8_t value; |
548 | } seg_flags; |
549 | |
550 | /** \brief Specifies per segment Loop Filter Delta. |
551 | * Must be 0 when segmentation_enabled == 0. |
552 | * value range: [-63..63] |
553 | */ |
554 | int8_t segment_lf_level_delta; |
555 | |
556 | /** \brief Specifies per segment QIndex Delta. |
557 | * Must be 0 when segmentation_enabled == 0. |
558 | * value range: [-255..255] |
559 | */ |
560 | int16_t segment_qindex_delta; |
561 | |
562 | /** \brief Reserved bytes for future use, must be zero */ |
563 | uint32_t va_reserved[VA_PADDING_LOW]; |
564 | } VAEncSegParamVP9; |
565 | |
566 | /** |
567 | * Structure to convey all segment related information. |
568 | * If segmentation is disabled, this data structure is still required. |
569 | * In this case, only seg_data[0] contains valid data. |
570 | * This buffer is sent once per frame. |
571 | * |
572 | * The buffer is created with VABufferType VAQMatrixBufferType. |
573 | * |
574 | */ |
575 | typedef struct _VAEncMiscParameterTypeVP9PerSegmantParam { |
576 | /** |
577 | * Parameters for 8 segments. |
578 | */ |
579 | VAEncSegParamVP9 seg_data[8]; |
580 | |
581 | /** \brief Reserved bytes for future use, must be zero */ |
582 | uint32_t va_reserved[VA_PADDING_LOW]; |
583 | } VAEncMiscParameterTypeVP9PerSegmantParam; |
584 | |
585 | |
586 | /** |
587 | * \brief VP9 Block Segmentation ID Buffer |
588 | * |
589 | * The application provides a buffer of VAEncMacroblockMapBufferType containing |
590 | * the initial segmentation id for each 8x8 block, one byte each, in raster scan order. |
591 | * Rate control may reassign it. For example, a 640x480 video, the buffer has 4800 entries. |
592 | * The value of each entry should be in the range [0..7], inclusive. |
593 | * If segmentation is not enabled, the application does not need to provide it. |
594 | */ |
595 | |
596 | |
597 | /**@}*/ |
598 | |
599 | #ifdef __cplusplus |
600 | } |
601 | #endif |
602 | |
603 | #endif /* VA_ENC_VP9_H */ |
604 | |