• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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