1 /* GStreamer 2 * Copyright (C) 2021 Seungha Yang <seungha@centricular.com> 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Library General Public 6 * License as published by the Free Software Foundation; either 7 * version 2 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Library General Public License for more details. 13 * 14 * You should have received a copy of the GNU Library General Public 15 * License along with this library; if not, write to the 16 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, 17 * Boston, MA 02110-1301, USA. 18 */ 19 20 #ifndef __GST_VP9_STATEFUL_PARSER_H__ 21 #define __GST_VP9_STATEFUL_PARSER_H__ 22 23 #include <gst/codecs/codecs-prelude.h> 24 #include <gst/codecparsers/gstvp9parser.h> 25 26 G_BEGIN_DECLS 27 28 typedef struct _GstVp9StatefulParser GstVp9StatefulParser; 29 typedef struct _GstVp9LoopFilterParams GstVp9LoopFilterParams; 30 typedef struct _GstVp9QuantizationParams GstVp9QuantizationParams; 31 typedef struct _GstVp9SegmentationParams GstVp9SegmentationParams; 32 typedef struct _GstVp9MvDeltaProbs GstVp9MvDeltaProbs; 33 typedef struct _GstVp9DeltaProbabilities GstVp9DeltaProbabilities; 34 typedef struct _GstVp9FrameHeader GstVp9FrameHeader; 35 36 /** 37 * GST_VP9_SEG_LVL_ALT_Q: 38 * 39 * Index for quantizer segment feature 40 * 41 * Since: 1.20 42 */ 43 #define GST_VP9_SEG_LVL_ALT_Q 0 44 45 /** 46 * GST_VP9_SEG_LVL_ALT_L: 47 * 48 * Index for loop filter segment feature 49 * 50 * Since: 1.20 51 */ 52 #define GST_VP9_SEG_LVL_ALT_L 1 53 54 /** 55 * GST_VP9_SEG_LVL_REF_FRAME: 56 * 57 * Index for reference frame segment feature 58 * 59 * Since: 1.20 60 */ 61 #define GST_VP9_SEG_LVL_REF_FRAME 2 62 63 /** 64 * GST_VP9_SEG_SEG_LVL_SKIP: 65 * 66 * Index for skip segment feature 67 * 68 * Since: 1.20 69 */ 70 #define GST_VP9_SEG_SEG_LVL_SKIP 3 71 72 /** 73 * GST_VP9_SEG_LVL_MAX: 74 * 75 * Number of segment features 76 * 77 * Since: 1.20 78 */ 79 #define GST_VP9_SEG_LVL_MAX 4 80 /** 81 * GST_VP9_TX_SIZE_CONTEXTS: 82 * 83 * Number of contexts for transform size 84 * 85 * Since: 1.20 86 */ 87 #define GST_VP9_TX_SIZE_CONTEXTS 2 88 89 /** 90 * GST_VP9_TX_SIZES: 91 * 92 * Number of values for tx_size 93 * 94 * Since: 1.20 95 * 96 */ 97 #define GST_VP9_TX_SIZES 4 98 99 /** 100 * GST_VP9_SKIP_CONTEXTS: 101 * 102 * Number of contexts for decoding skip 103 * 104 * Since: 1.20 105 * 106 */ 107 #define GST_VP9_SKIP_CONTEXTS 3 108 109 /** 110 * GST_VP9_INTER_MODE_CONTEXTS: 111 * 112 * Number of contexts for inter_mode 113 * 114 * Since: 1.20 115 * 116 */ 117 #define GST_VP9_INTER_MODE_CONTEXTS 7 118 119 /** 120 * GST_VP9_INTER_MODES: 121 * 122 * Number of values for inter_mode 123 * 124 * Since: 1.20 125 * 126 */ 127 #define GST_VP9_INTER_MODES 4 128 129 /** 130 * GST_VP9_INTERP_FILTER_CONTEXTS: 131 * 132 * Number of contexts for interp_filter 133 * 134 * Since: 1.20 135 * 136 */ 137 #define GST_VP9_INTERP_FILTER_CONTEXTS 4 138 139 /** 140 * GST_VP9_SWITCHABLE_FILTERS: 141 * 142 * Number of contexts for interp_filter 143 * 144 * Since: 1.20 145 * 146 */ 147 #define GST_VP9_SWITCHABLE_FILTERS 3 148 149 150 /** 151 * GST_VP9_IS_INTER_CONTEXTS: 152 * 153 * Number of contexts for interp_filter 154 * 155 * Since: 1.20 156 * 157 */ 158 #define GST_VP9_IS_INTER_CONTEXTS 4 159 160 /** 161 * GST_VP9_COMP_MODE_CONTEXTS: 162 * 163 * Number of contexts for comp_mode 164 * 165 * Since: 1.20 166 * 167 */ 168 #define GST_VP9_COMP_MODE_CONTEXTS 5 169 170 /** 171 * GST_VP9_REF_CONTEXTS: 172 * 173 * Number of contexts for single_ref and comp_ref 174 * 175 * Since: 1.20 176 * 177 */ 178 #define GST_VP9_REF_CONTEXTS 5 179 180 /** 181 * GST_VP9_BLOCK_SIZE_GROUPS: 182 * 183 * Number of contexts when decoding intra_mode 184 * 185 * Since: 1.20 186 * 187 */ 188 #define GST_VP9_BLOCK_SIZE_GROUPS 4 189 190 /** 191 * GST_VP9_INTRA_MODES: 192 * 193 * Number of values for intra_mode 194 * 195 * Since: 1.20 196 * 197 */ 198 #define GST_VP9_INTRA_MODES 10 199 200 /** 201 * GST_VP9_PARTITION_CONTEXTS: 202 * 203 * Number of contexts when decoding partition 204 * 205 * Since: 1.20 206 * 207 */ 208 #define GST_VP9_PARTITION_CONTEXTS 16 209 210 /** 211 * GST_VP9_PARTITION_TYPES: 212 * 213 * Number of values for partition 214 * 215 * Since: 1.20 216 * 217 */ 218 #define GST_VP9_PARTITION_TYPES 4 219 220 /** 221 * GST_VP9_MV_JOINTS: 222 * 223 * Number of values for partition 224 * 225 * Since: 1.20 226 * 227 */ 228 #define GST_VP9_MV_JOINTS 4 229 230 /** 231 * GST_VP9_MV_CLASSES: 232 * 233 * Number of values for mv_class 234 * 235 * Since: 1.20 236 * 237 */ 238 #define GST_VP9_MV_CLASSES 11 239 240 /** 241 * GST_VP9_MV_OFFSET_BITS: 242 * 243 * Maximum number of bits for decoding motion vectors 244 * 245 * Since: 1.20 246 * 247 */ 248 #define GST_VP9_MV_OFFSET_BITS 10 249 250 /** 251 * GST_VP9_CLASS0_SIZE: 252 * 253 * Number of values for mv_classO_bit 254 * 255 * Since: 1.20 256 * 257 */ 258 #define GST_VP9_CLASS0_SIZE 2 259 260 /** 261 * GST_VP9_MV_FR_SIZE: 262 * 263 * Number of values that can be decoded for mv_fr 264 * 265 * Since: 1.20 266 * 267 */ 268 #define GST_VP9_MV_FR_SIZE 4 269 270 /** 271 * GST_VP9_TX_MODES: 272 * 273 * Number of values for tx_mode 274 * 275 * Since: 1.20 276 * 277 */ 278 #define GST_VP9_TX_MODES 5 279 280 /** 281 * GstVp9TxMode: 282 * @GST_VP9_TX_MODE_ONLY_4x4: Only 4x4 283 * @GST_VP9_TX_MODE_ALLOW_8x8: Allow 8x8 284 * @GST_VP9_TX_MODE_ALLOW_16x16: Allow 16x16 285 * @GST_VP9_TX_MODE_ALLOW_32x32: Allow 32x32 286 * @GST_VP9_TX_MODE_SELECT: The choice is specified explicitly for each block 287 * 288 * TxMode: Specifies how the transform size is determined 289 * 290 * Since: 1.20 291 */ 292 typedef enum 293 { 294 GST_VP9_TX_MODE_ONLY_4x4 = 0, 295 GST_VP9_TX_MODE_ALLOW_8x8 = 1, 296 GST_VP9_TX_MODE_ALLOW_16x16 = 2, 297 GST_VP9_TX_MODE_ALLOW_32x32 = 3, 298 GST_VP9_TX_MODE_SELECT = 4, 299 300 } GstVp9TxMode; 301 302 /** 303 * GstVp9ReferenceMode: 304 * @GST_VP9_REFERENCE_MODE_SINGLE_REFERENCE: Indicates that all the inter blocks use only a single reference frame 305 * @GST_VP9_REFERENCE_MODE_COMPOUND_REFERENCE: Requires all the inter blocks to use compound mode 306 * @GST_VP9_REFERENCE_MODE_SELECT: Allows each individual inter block to select between single and compound prediction modes 307 * 308 * Reference modes: Specify the type of inter prediction to be used 309 * 310 * Since: 1.20 311 */ 312 typedef enum 313 { 314 GST_VP9_REFERENCE_MODE_SINGLE_REFERENCE = 0, 315 GST_VP9_REFERENCE_MODE_COMPOUND_REFERENCE = 1, 316 GST_VP9_REFERENCE_MODE_SELECT = 2, 317 } GstVp9ReferenceMode; 318 319 /** 320 * GstVp9TxSize: 321 * @GST_VP9_TX_4x4: 4x4 322 * @GST_VP9_TX_8x8: 8x8 323 * @GST_VP9_TX_16x16: 16x16 324 * @GST_VP9_TX_32x32: 32x32 325 * 326 * TxSize: Specifies the transform size 327 * 328 * Since: 1.20 329 */ 330 typedef enum 331 { 332 GST_VP9_TX_4x4 = 0, 333 GST_VP9_TX_8x8 = 1, 334 GST_VP9_TX_16x16 = 2, 335 GST_VP9_TX_32x32 = 3, 336 } GstVp9TxSize; 337 338 /** 339 * GstVp9LoopFilterParams: 340 * @loop_filter_level: indicates the loop filter strength 341 * @loop_filter_sharpness: indicates the sharpness level 342 * @loop_filter_delta_enabled: equal to 1 means that the filter level depends 343 * on the mode and reference frame used to predict a block 344 * @loop_filter_delta_update: equal to 1 means that the bitstream contains 345 * additional syntax elements that specify which mode and reference frame 346 * deltas are to be updated 347 * @update_ref_delta: equal to 1 means that the bitstream contains the syntax 348 * element loop_filter_ref_delta 349 * @loop_filter_ref_deltas: contains the adjustment needed for the filter level 350 * based on the chosen reference frame 351 * @update_mode_delta: equal to 1 means that the bitstream contains the syntax 352 * element loop_filter_mode_deltas 353 * @loop_filter_mode_deltas: contains the adjustment needed for the filter level 354 * based on the chosen mode 355 * 356 * Loop filter params. See "6.2.8 Loop filter params syntax" and 357 * "7.2.8 Loop filter semantics". 358 * 359 * If syntax elements for @update_ref_delta 360 * and/or @loop_filter_mode_deltas are not present in bitstream, 361 * parser will fill @loop_filter_ref_deltas and @loop_filter_mode_deltas values 362 * by using previously parsed values. 363 * 364 * Since: 1.20 365 */ 366 struct _GstVp9LoopFilterParams 367 { 368 guint8 loop_filter_level; 369 guint8 loop_filter_sharpness; 370 guint8 loop_filter_delta_enabled; 371 guint8 loop_filter_delta_update; 372 373 guint8 update_ref_delta[GST_VP9_MAX_REF_LF_DELTAS]; 374 gint8 loop_filter_ref_deltas[GST_VP9_MAX_REF_LF_DELTAS]; 375 376 guint8 update_mode_delta[GST_VP9_MAX_MODE_LF_DELTAS]; 377 gint8 loop_filter_mode_deltas[GST_VP9_MAX_MODE_LF_DELTAS]; 378 }; 379 380 /** 381 * GstVp9QuantizationParams: 382 * @base_q_idx: indicates the base frame qindex. This is used for Y AC 383 * coefficients and as the base value for the other quantizers 384 * @delta_q_y_dc: indicates the Y DC quantizer relative to base_q_idx 385 * @delta_q_uv_dc: indicates the UV DC quantizer relative to base_q_idx 386 * @delta_q_uv_ac: indicates the UV AC quantizer relative to base_q_idx 387 * 388 * Since: 1.20 389 */ 390 struct _GstVp9QuantizationParams 391 { 392 guint8 base_q_idx; 393 gint8 delta_q_y_dc; 394 gint8 delta_q_uv_dc; 395 gint8 delta_q_uv_ac; 396 }; 397 398 /** 399 * GstVp9SegmentationParams: 400 * @segmentation_enabled: equal to 1 indicates that this frame makes use of the 401 * segmentation tool 402 * @segmentation_update_map: equal to 1 indicates that the segmentation map 403 * should be updated during the decoding of this frame 404 * @segmentation_tree_probs: specify the probability values to be used when 405 * decoding segment_id 406 * @segmentation_pred_prob: specify the probability values to be used when 407 * decoding seg_id_predicted 408 * @segmentation_temporal_update: equal to 1 indicates that the updates to 409 * the segmentation map are coded relative to the existing segmentation map 410 * @segmentation_update_data: equal to 1 indicates that new parameters are 411 * about to be specified for each segment 412 * @segmentation_abs_or_delta_update: equal to 0 indicates that the segmentation 413 * parameters represent adjustments relative to the standard values. 414 * equal to 1 indicates that the segmentation parameters represent the actual 415 * values to be used 416 * @feature_enabled: indicates whether feature is enabled or not 417 * @feature_data: segmentation feature data 418 * 419 * See "6.2.11 Segmentation params syntax" and 420 * "7.2.10 Segmentation params syntax". When @segmentation_update_data is equal 421 * to zero, parser will fill @feature_enabled and by @feature_data 422 * using previously parsed values. 423 * 424 * Since: 1.20 425 */ 426 struct _GstVp9SegmentationParams 427 { 428 guint8 segmentation_enabled; 429 guint8 segmentation_update_map; 430 guint8 segmentation_tree_probs[GST_VP9_SEG_TREE_PROBS]; 431 guint8 segmentation_pred_prob[GST_VP9_PREDICTION_PROBS]; 432 guint8 segmentation_temporal_update; 433 434 guint8 segmentation_update_data; 435 guint8 segmentation_abs_or_delta_update; 436 437 guint8 feature_enabled[GST_VP9_MAX_SEGMENTS][GST_VP9_SEG_LVL_MAX]; 438 gint16 feature_data[GST_VP9_MAX_SEGMENTS][GST_VP9_SEG_LVL_MAX]; 439 }; 440 441 /** 442 * GstVp9MvDeltaProbs: 443 * 444 * Stores motion vectors probabilities updates. This is from the spec 445 * and can be used as a binary. 446 * 447 * Since: 1.20 448 */ 449 struct _GstVp9MvDeltaProbs 450 { 451 /*< private >*/ 452 guint8 joint[GST_VP9_MV_JOINTS - 1]; 453 guint8 sign[2]; 454 guint8 klass[2][GST_VP9_MV_CLASSES - 1]; 455 guint8 class0_bit[2]; 456 guint8 bits[2][GST_VP9_MV_OFFSET_BITS]; 457 guint8 class0_fr[2][GST_VP9_CLASS0_SIZE][GST_VP9_MV_FR_SIZE - 1]; 458 guint8 fr[2][GST_VP9_MV_FR_SIZE - 1]; 459 guint8 class0_hp[2]; 460 guint8 hp[2]; 461 }; 462 463 464 /** 465 * GstVp9DeltaProbabilities: 466 * 467 * Stores probabilities updates. This is from the spec 468 * and can be used as a binary. 469 * 470 * Since: 1.20 471 */ 472 struct _GstVp9DeltaProbabilities 473 { 474 /*< private >*/ 475 guint8 tx_probs_8x8[GST_VP9_TX_SIZE_CONTEXTS][GST_VP9_TX_SIZES - 3]; 476 guint8 tx_probs_16x16[GST_VP9_TX_SIZE_CONTEXTS][GST_VP9_TX_SIZES - 2]; 477 guint8 tx_probs_32x32[GST_VP9_TX_SIZE_CONTEXTS][GST_VP9_TX_SIZES - 1]; 478 guint8 coef[4][2][2][6][6][3]; 479 guint8 skip[GST_VP9_SKIP_CONTEXTS]; 480 guint8 inter_mode[GST_VP9_INTER_MODE_CONTEXTS][GST_VP9_INTER_MODES - 1]; 481 guint8 482 interp_filter[GST_VP9_INTERP_FILTER_CONTEXTS][GST_VP9_SWITCHABLE_FILTERS 483 - 1]; 484 guint8 is_inter[GST_VP9_IS_INTER_CONTEXTS]; 485 guint8 comp_mode[GST_VP9_COMP_MODE_CONTEXTS]; 486 guint8 single_ref[GST_VP9_REF_CONTEXTS][2]; 487 guint8 comp_ref[GST_VP9_REF_CONTEXTS]; 488 guint8 y_mode[GST_VP9_BLOCK_SIZE_GROUPS][GST_VP9_INTRA_MODES - 1]; 489 guint8 partition[GST_VP9_PARTITION_CONTEXTS][GST_VP9_PARTITION_TYPES - 1]; 490 GstVp9MvDeltaProbs mv; 491 }; 492 493 494 /** 495 * GstVp9FrameHeader: 496 * @profile: encoded profile 497 * @bit_depth: encoded bit depth 498 * @subsampling_x: specify the chroma subsampling format for x coordinate 499 * @subsampling_y: specify the chroma subsampling format for y coordinate 500 * @color_space: specifies the color space of the stream 501 * @color_range: specifies the black level and range of the luma and chroma 502 * signals 503 * @show_existing_frame: equal to 1, indicates the frame indexed by 504 * frame_to_show_map_idx is to be displayed 505 * @frame_to_show_map_idx: specifies the frame to be displayed. 506 * It is only available if show_existing_frame is 1 507 * @frame_type: equal to 0 indicates that the current frame is a key frame 508 * @show_frame: indicate whether it is a displayable frame or not 509 * @error_resilient_mode: equal to 1 indicates that error resilient mode is 510 * enabled 511 * @width: coded frame width 512 * @height: coded frame height 513 * @render_and_frame_size_different: equal to 0 means that the render width and 514 * height are inferred from the frame width and height 515 * @render_width: render width of the frame 516 * @render_height: render width of the frame 517 * @intra_only: equal to 1 indicates that the frame is an intra-only frame 518 * @reset_frame_context: specifies whether the frame context should be reset to 519 * default values 520 * @refresh_frame_flags: contains a bitmask that specifies which reference frame 521 * slots will be updated with the current frame after it is decoded 522 * @ref_frame_idx: specifies which reference frames are used by inter frames 523 * @ref_frame_sign_bias: specifies the intended direction of the motion vector 524 * in time for each reference frame. A sign bias equal to 0 indicates that 525 * the reference frame is a backwards reference 526 * @allow_high_precision_mv: equal to 0 specifies that motion vectors are 527 * specified to quarter pel precision 528 * @interpolation_filter: specifies the filter selection used for performing 529 * inter prediction 530 * @refresh_frame_context: equal to 1 indicates that the probabilities computed 531 * for this frame 532 * @frame_parallel_decoding_mode: equal to 1 indicates that parallel decoding 533 * mode is enabled 534 * @frame_context_idx: indicates the frame context to use 535 * @loop_filter_params: a #GstVp9LoopFilterParams 536 * @quantization_params: a #GstVp9QuantizationParams 537 * @segmentation_params: a #GstVp9SegmentationParams 538 * @tile_cols_log2: specifies the base 2 logarithm of the width of each tile 539 * @tile_rows_log2: specifies the base 2 logarithm of the height of each tile 540 * @tx_mode: specifies how the transform size is determined 541 * @reference_mode: is a derived syntax element that specifies the type of 542 * inter prediction to be used 543 * @delta_probabilities: modification to the probabilities encoded in the 544 * bitstream 545 * @lossless_flag: lossless mode decode 546 * @frame_header_length_in_bytes: length of uncompressed header 547 * 548 * Since: 1.20 549 */ 550 /** 551 * GstVp9FrameHeader.tx_mode: 552 * 553 * Specifies how the transform size is determined. 554 * 555 * Since: 1.20 556 */ 557 /** 558 * GstVp9FrameHeader.reference_mode: 559 * 560 * Is a derived syntax element that specifies the type of 561 * inter prediction to be used. 562 * 563 * Since: 1.20 564 */ 565 /** 566 * GstVp9FrameHeader.delta_probabilities: 567 * 568 * Modification to the probabilities encoded in the bitstream. 569 * 570 * Since: 1.20 571 */ 572 struct _GstVp9FrameHeader 573 { 574 guint8 profile; 575 guint8 bit_depth; 576 guint8 subsampling_x; 577 guint8 subsampling_y; 578 guint8 color_space; 579 guint8 color_range; 580 guint8 show_existing_frame; 581 guint8 frame_to_show_map_idx; 582 guint8 frame_type; 583 guint8 show_frame; 584 guint8 error_resilient_mode; 585 guint32 width; 586 guint32 height; 587 guint8 render_and_frame_size_different; 588 guint32 render_width; 589 guint32 render_height; 590 guint8 intra_only; 591 guint8 reset_frame_context; 592 guint8 refresh_frame_flags; 593 guint8 ref_frame_idx[GST_VP9_REFS_PER_FRAME]; 594 guint8 ref_frame_sign_bias[4]; 595 guint8 allow_high_precision_mv; 596 guint8 interpolation_filter; 597 598 guint8 refresh_frame_context; 599 guint8 frame_parallel_decoding_mode; 600 guint8 frame_context_idx; 601 602 GstVp9LoopFilterParams loop_filter_params; 603 GstVp9QuantizationParams quantization_params; 604 GstVp9SegmentationParams segmentation_params; 605 606 guint8 tile_cols_log2; 607 guint8 tile_rows_log2; 608 609 guint16 header_size_in_bytes; 610 611 /* compressed header */ 612 GstVp9TxMode tx_mode; 613 GstVp9ReferenceMode reference_mode; 614 GstVp9DeltaProbabilities delta_probabilities; 615 616 /* calculated values */ 617 guint8 lossless_flag; 618 guint32 frame_header_length_in_bytes; 619 }; 620 621 /** 622 * GstVp9StatefulParser: 623 * 624 * Opaque VP9 parser struct. 625 * The size of this object and member variables are not API 626 * 627 * Since: 1.20 628 */ 629 struct _GstVp9StatefulParser 630 { 631 /*< private >*/ 632 guint8 bit_depth; 633 guint8 subsampling_x; 634 guint8 subsampling_y; 635 guint8 color_space; 636 guint8 color_range; 637 638 guint mi_cols; 639 guint mi_rows; 640 guint sb64_cols; 641 guint sb64_rows; 642 643 GstVp9LoopFilterParams loop_filter_params; 644 GstVp9SegmentationParams segmentation_params; 645 646 struct { 647 guint32 width; 648 guint32 height; 649 } reference[GST_VP9_REF_FRAMES]; 650 }; 651 652 GST_CODECS_API 653 GstVp9StatefulParser * gst_vp9_stateful_parser_new (void); 654 655 GST_CODECS_API 656 void gst_vp9_stateful_parser_free (GstVp9StatefulParser * parser); 657 658 GST_CODECS_API 659 GstVp9ParserResult gst_vp9_stateful_parser_parse_compressed_frame_header (GstVp9StatefulParser * parser, 660 GstVp9FrameHeader * header, 661 const guint8 * data, 662 gsize size); 663 664 GST_CODECS_API 665 GstVp9ParserResult gst_vp9_stateful_parser_parse_uncompressed_frame_header (GstVp9StatefulParser * parser, 666 GstVp9FrameHeader * header, 667 const guint8 * data, 668 gsize size); 669 670 /* Util methods */ 671 GST_CODECS_API 672 gboolean gst_vp9_seg_feature_active (const GstVp9SegmentationParams * params, 673 guint8 segment_id, 674 guint8 feature); 675 676 GST_CODECS_API 677 guint8 gst_vp9_get_qindex (const GstVp9SegmentationParams * segmentation_params, 678 const GstVp9QuantizationParams * quantization_params, 679 guint8 segment_id); 680 681 682 GST_CODECS_API 683 gint16 gst_vp9_get_dc_quant (guint8 qindex, 684 gint8 delta_q_dc, 685 guint8 bit_depth); 686 687 GST_CODECS_API 688 gint16 gst_vp9_get_ac_quant (guint8 qindex, 689 gint8 delta_q_ac, 690 guint8 bit_depth); 691 692 G_END_DECLS 693 694 #endif /* __GST_VP9_STATEFUL_PARSER_H__ */ 695