GstVp9Parser
For more details about the structures, you can refer to the specifications:
Functions
gst_vp9_parser_free
void gst_vp9_parser_free (GstVp9Parser * parser)
Frees parser.
Parameters:
parser
–
the GstVp9Parser to free
Since : 1.8
gst_vp9_parser_new
GstVp9Parser * gst_vp9_parser_new ()
Creates a new GstVp9Parser. It should be freed with gst_vp9_parser_free after use.
a new GstVp9Parser
Since : 1.8
gst_vp9_parser_parse_frame_header
GstVp9ParserResult gst_vp9_parser_parse_frame_header (GstVp9Parser * parser, GstVp9FrameHdr * frame_hdr, guint8 * data, gsize size)
Parses the VP9 bitstream contained in data, and fills in frame_hdr with the information. The size argument represent the whole frame size.
Parameters:
parser
–
The GstVp9Parser
frame_hdr
–
The GstVp9FrameHdr to fill
data
–
The data to parse
size
–
The size of the data to parse
Since : 1.8
gst_vp9_parser_parse_superframe_info
GstVp9ParserResult gst_vp9_parser_parse_superframe_info (GstVp9Parser * parser, GstVp9SuperframeInfo * superframe_info, guint8 * data, gsize size)
Parses the VP9 bitstream contained in data, and fills in superframe_info with the information. The size argument represent the whole superframe size. If data is not superframe but normal frame, the parser returns GST_VP9_PARSER_OK, frame_size[0] is set to size and frames_in_superframe is set to 1. Also this method does not validate vp9frame header and verifying the frame header is caller's responsibility.
Parameters:
parser
–
The GstVp9Parser
superframe_info
–
The GstVp9SuperframeInfo to fill
data
–
The data to parse
size
–
The size of the data to parse
Since : 1.18
Structures
GstVp9FrameHdr
struct _GstVp9FrameHdr { guint profile; guint8 show_existing_frame; gint frame_to_show; guint frame_type; guint8 show_frame; guint8 error_resilient_mode; guint32 width; guint32 height; guint8 display_size_enabled; guint32 display_width; guint32 display_height; guint frame_context_idx; guint8 intra_only; gint reset_frame_context; gint refresh_frame_flags; gint ref_frame_indices[GST_VP9_REFS_PER_FRAME]; gint ref_frame_sign_bias[GST_VP9_REFS_PER_FRAME]; gint allow_high_precision_mv; guint8 mcomp_filter_type; gint refresh_frame_context; /* frame_parallel_decoding_mode in vp9 code*/ gint frame_parallel_decoding_mode; GstVp9LoopFilter loopfilter; GstVp9QuantIndices quant_indices; GstVp9SegmentationInfo segmentation; gint log2_tile_rows; gint log2_tile_columns; guint32 first_partition_size; /* calculated values */ guint lossless_flag; guint32 frame_header_length_in_bytes; };
Frame header
Fields
profile
(guint)
–
encoded profile
show_existing_frame
(guint8)
–
display already decoded frame instead of doing the decoding
frame_to_show
(gint)
–
which frame to show if show_existing_frame is true
frame_type
(guint)
–
frame type
show_frame
(guint8)
–
indicate whether it is a displayable frame or not
error_resilient_mode
(guint8)
–
error resilent mode
width
(guint32)
–
frame width
height
(guint32)
–
frame height
display_size_enabled
(guint8)
–
display size enabled (cropping)
display_width
(guint32)
–
display width
display_height
(guint32)
–
display height
frame_context_idx
(guint)
–
frame context index
intra_only
(guint8)
–
intra only frame
reset_frame_context
(gint)
–
reset frame context
refresh_frame_flags
(gint)
–
refresh reference frame flags
ref_frame_indices
(gint[3] )
–
reference frame index
ref_frame_sign_bias
(gint[3] )
–
sign bias for selecting altref,last and golden frames
allow_high_precision_mv
(gint)
–
allow hight precision motion vector
mcomp_filter_type
(guint8)
–
interpolation filter type
refresh_frame_context
(gint)
–
refresh frame context indicator
frame_parallel_decoding_mode
(gint)
–
enable or disable parallel decoding support.
loopfilter
(GstVp9LoopFilter)
–
loopfilter values
quant_indices
(GstVp9QuantIndices)
–
quantization indices
segmentation
(GstVp9SegmentationInfo)
–
segmentation info
log2_tile_rows
(gint)
–
tile row indicator
log2_tile_columns
(gint)
–
tile column indicator
first_partition_size
(guint32)
–
first partition size (after the uncompressed header)
lossless_flag
(guint)
–
lossless mode decode
frame_header_length_in_bytes
(guint32)
–
length of uncompressed header
Since : 1.8
GstVp9LoopFilter
struct _GstVp9LoopFilter { gint filter_level; gint sharpness_level; guint8 mode_ref_delta_enabled; guint8 mode_ref_delta_update; guint8 update_ref_deltas[GST_VP9_MAX_REF_LF_DELTAS]; gint8 ref_deltas[GST_VP9_MAX_REF_LF_DELTAS]; guint8 update_mode_deltas[GST_VP9_MAX_MODE_LF_DELTAS]; gint8 mode_deltas[GST_VP9_MAX_MODE_LF_DELTAS]; };
Loop filter values
Fields
filter_level
(gint)
–
indicates loop filter level for the current frame
sharpness_level
(gint)
–
indicates sharpness level for thecurrent frame
mode_ref_delta_enabled
(guint8)
–
indicate if filter adjust is on
mode_ref_delta_update
(guint8)
–
indicates if the delta values used in an adjustment are updated in the current frame
update_ref_deltas
(guint8[4] )
–
indicate which ref deltas are updated
ref_deltas
(gint8[4] )
–
Loop filter strength adjustments based on frame type (intra, inter)
update_mode_deltas
(guint8[2] )
–
indicate with mode deltas are updated
mode_deltas
(gint8[2] )
–
Loop filter strength adjustments based on mode (zero, new mv)
Since : 1.8
GstVp9Parser
struct _GstVp9Parser { #ifndef GST_REMOVE_DEPRECATED void *priv; /* unused, kept around for ABI compatibility */ #endif gint subsampling_x; gint subsampling_y; guint bit_depth; guint color_space; guint color_range; guint8 mb_segment_tree_probs[GST_VP9_SEG_TREE_PROBS]; guint8 segment_pred_probs[GST_VP9_PREDICTION_PROBS]; GstVp9Segmentation segmentation[GST_VP9_MAX_SEGMENTS]; };
Parser context that needs to be live across frames
Fields
priv
(void *)
–
GstVp9ParserPrivate struct to keep track of state variables
subsampling_x
(gint)
–
horizontal subsampling
subsampling_y
(gint)
–
vertical subsampling
bit_depth
(guint)
–
bit depth of the stream
color_space
(guint)
–
color space standard
color_range
(guint)
–
color range standard
mb_segment_tree_probs
(guint8[7] )
–
decoding tree probabilities
segment_pred_probs
(guint8[3] )
–
segment prediction probabiilties
segmentation
(GstVp9Segmentation[8] )
–
Segmentation info
Since : 1.8
GstVp9QuantIndices
struct _GstVp9QuantIndices { guint8 y_ac_qi; gint8 y_dc_delta; gint8 uv_dc_delta; gint8 uv_ac_delta; };
Dequantization indices.
Fields
y_ac_qi
(guint8)
–
indicates the dequantization table index used for the luma AC coefficients
y_dc_delta
(gint8)
–
indicates the delta value that is added to the baseline index to obtain the luma DC coefficient dequantization index
uv_dc_delta
(gint8)
–
indicates the delta value that is added to the baseline index to obtain the chroma DC coefficient dequantization index
uv_ac_delta
(gint8)
–
indicates the delta value that is added to the baseline index to obtain the chroma AC coefficient dequantization index
Since : 1.8
GstVp9Segmentation
struct _GstVp9Segmentation { guint8 filter_level[GST_VP9_MAX_REF_LF_DELTAS][GST_VP9_MAX_MODE_LF_DELTAS]; gint16 luma_ac_quant_scale; gint16 luma_dc_quant_scale; gint16 chroma_ac_quant_scale; gint16 chroma_dc_quant_scale; guint8 reference_frame_enabled; gint reference_frame; guint8 reference_skip; };
Segmentation info kept across multiple frames
Fields
filter_level
(guint8[4][2] )
–
loop filter level
luma_ac_quant_scale
(gint16)
–
AC quant scale for luma(Y) component
luma_dc_quant_scale
(gint16)
–
DC quant scale for luma(Y) component chroma_ac_quant_scale AC quant scale for chroma(U/V) component
chroma_ac_quant_scale
(gint16)
–
chroma_dc_quant_scale
(gint16)
–
DC quant scale for chroma (U/V) component
reference_frame_enabled
(guint8)
–
alternate reference frame enablement
reference_frame
(gint)
–
alternate reference frame
reference_skip
(guint8)
–
a block skip mode that implies both the use of a (0,0) motion vector and that no residual will be coded
Since : 1.8
GstVp9SegmentationInfo
struct _GstVp9SegmentationInfo { /* enable in setup_segmentation*/ guint8 enabled; /* update_map in setup_segmentation*/ guint8 update_map; /* tree_probs exist or not*/ guint8 update_tree_probs[GST_VP9_SEG_TREE_PROBS]; guint8 tree_probs[GST_VP9_SEG_TREE_PROBS]; /* pred_probs exist or not*/ guint8 update_pred_probs[GST_VP9_PREDICTION_PROBS]; guint8 pred_probs[GST_VP9_PREDICTION_PROBS]; /* abs_delta in setup_segmentation */ guint8 abs_delta; /* temporal_update in setup_segmentation */ guint8 temporal_update; /* update_data in setup_segmentation*/ guint8 update_data; GstVp9SegmentationInfoData data[GST_VP9_MAX_SEGMENTS]; };
Segmentation info
Fields
enabled
(guint8)
–
enables the segmentation feature for the current frame
update_map
(guint8)
–
determines if segmentation is updated in the current frame
update_tree_probs
(guint8[7] )
–
determines if tree probabilities updated or not
tree_probs
(guint8[7] )
–
segment tree probabilities
update_pred_probs
(guint8[3] )
–
determines if prediction probabilities updated or not
pred_probs
(guint8[3] )
–
prediction probabilities
abs_delta
(guint8)
–
interpretation of segment data values
temporal_update
(guint8)
–
type of map update
update_data
(guint8)
–
indicates if the segment feature data is updated in the current frame
data
(GstVp9SegmentationInfoData[8] )
–
segment feature data
Since : 1.8
GstVp9SegmentationInfoData
struct _GstVp9SegmentationInfoData { /* SEG_LVL_ALT_Q */ guint8 alternate_quantizer_enabled; gint16 alternate_quantizer; /* SEG_LVL_ALT_LF */ guint8 alternate_loop_filter_enabled; gint8 alternate_loop_filter; /* SEG_LVL_REF_FRAME */ guint8 reference_frame_enabled; gint reference_frame; guint8 reference_skip; };
Segmentation info for each segment
Fields
alternate_quantizer_enabled
(guint8)
–
indicate alternate quantizer enabled at segment level
alternate_quantizer
(gint16)
–
alternate quantizer value
alternate_loop_filter_enabled
(guint8)
–
indicate alternate loop filter enabled at segment level
alternate_loop_filter
(gint8)
–
alternate loop filter
reference_frame_enabled
(guint8)
–
indicate alternate reference frame at segment level
reference_frame
(gint)
–
alternate reference frame
reference_skip
(guint8)
–
a block skip mode that implies both the use of a (0,0) motion vector and that no residual will be coded.
Since : 1.8
GstVp9SuperframeInfo
struct _GstVp9SuperframeInfo { guint32 bytes_per_framesize; guint32 frames_in_superframe; guint32 frame_sizes[GST_VP9_MAX_FRAMES_IN_SUPERFRAME]; guint32 superframe_index_size; };
Superframe info
Fields
bytes_per_framesize
(guint32)
–
indicates the number of bytes needed to code each frame size
frames_in_superframe
(guint32)
–
indicates the number of frames within this superframe
frame_sizes
(guint32[8] )
–
specifies the size in bytes of frame number i (zero indexed) within this superframe
superframe_index_size
(guint32)
–
indicates the total size of the superframe_index
Since : 1.18
Enumerations
GstVP9Profile
typedef enum { GST_VP9_PROFILE_0, GST_VP9_PROFILE_1, GST_VP9_PROFILE_2, GST_VP9_PROFILE_3, GST_VP9_PROFILE_UNDEFINED } GstVP9Profile;
Members
GST_VP9_PROFILE_0
(0)
–
GST_VP9_PROFILE_1
(1)
–
GST_VP9_PROFILE_2
(2)
–
GST_VP9_PROFILE_3
(3)
–
GST_VP9_PROFILE_UNDEFINED
(4)
–
GstVp9BitDepth
typedef enum { GST_VP9_BIT_DEPTH_8 = 8, GST_VP9_BIT_DEPTH_10 = 10, GST_VP9_BIT_DEPTH_12 = 12 } GstVp9BitDepth;
Bit depths of encoded frames
Members
GST_VP9_BIT_DEPTH_8
(8)
–
Bit depth is 8 GST_VP9_BIT_DEPTH_10 Bit depth is 10
GST_VP9_BIT_DEPTH_10
(10)
–
GST_VP9_BIT_DEPTH_12
(12)
–
Bit depth is 12
Since : 1.8
GstVp9ColorRange
typedef enum { GST_VP9_CR_LIMITED, GST_VP9_CR_FULL } GstVp9ColorRange;
Possible color value ranges
Members
GST_VP9_CR_LIMITED
(0)
–
Y range is [16-235], UV range is [16-240]
GST_VP9_CR_FULL
(1)
–
Full range for Y,U and V [0-255]
Since : 1.8
GstVp9ColorSpace
typedef enum { GST_VP9_CS_UNKNOWN = 0, GST_VP9_CS_BT_601 = 1, GST_VP9_CS_BT_709 = 2, GST_VP9_CS_SMPTE_170 = 3, GST_VP9_CS_SMPTE_240 = 4, GST_VP9_CS_BT_2020 = 5, GST_VP9_CS_RESERVED_2 = 6, GST_VP9_CS_SRGB = 7 } GstVp9ColorSpace;
Supported ColorSpace standards
Members
GST_VP9_CS_UNKNOWN
(0)
–
Unknown color space
GST_VP9_CS_BT_601
(1)
–
BT.601
GST_VP9_CS_BT_709
(2)
–
BT.709
GST_VP9_CS_SMPTE_170
(3)
–
SMPTE.170
GST_VP9_CS_SMPTE_240
(4)
–
SMPTE.240
GST_VP9_CS_BT_2020
(5)
–
BT.2020
GST_VP9_CS_RESERVED_2
(6)
–
GST_VP9_CS_SRGB
(7)
–
sRGB
Since : 1.8
GstVp9FrameType
typedef enum { GST_VP9_KEY_FRAME = 0, GST_VP9_INTER_FRAME = 1 } GstVp9FrameType;
VP9 frame types
Members
GST_VP9_KEY_FRAME
(0)
–
Key frame, only have intra blocks
GST_VP9_INTER_FRAME
(1)
–
Inter frame, both intra and inter blocks
Since : 1.8
GstVp9InterpolationFilter
typedef enum { GST_VP9_INTERPOLATION_FILTER_EIGHTTAP = 0, GST_VP9_INTERPOLATION_FILTER_EIGHTTAP_SMOOTH = 1, GST_VP9_INTERPOLATION_FILTER_EIGHTTAP_SHARP = 2, GST_VP9_INTERPOLATION_FILTER_BILINEAR = 3, GST_VP9_INTERPOLATION_FILTER_SWITCHABLE = 4 } GstVp9InterpolationFilter;
Interpolation Filters Types
Members
GST_VP9_INTERPOLATION_FILTER_EIGHTTAP
(0)
–
EightTap interpolation filter
GST_VP9_INTERPOLATION_FILTER_EIGHTTAP_SMOOTH
(1)
–
Smooth interpolation filter
GST_VP9_INTERPOLATION_FILTER_EIGHTTAP_SHARP
(2)
–
Shart interpolation filter
GST_VP9_INTERPOLATION_FILTER_BILINEAR
(3)
–
Bilinear interpolation filter
GST_VP9_INTERPOLATION_FILTER_SWITCHABLE
(4)
–
Selectable interpolation filter
Since : 1.8
GstVp9ParserResult
typedef enum { GST_VP9_PARSER_OK, GST_VP9_PARSER_BROKEN_DATA, GST_VP9_PARSER_ERROR, } GstVp9ParserResult;
Members
GST_VP9_PARSER_OK
(0)
–
GST_VP9_PARSER_BROKEN_DATA
(1)
–
GST_VP9_PARSER_ERROR
(2)
–
GstVp9RefFrameType
typedef enum { GST_VP9_REF_FRAME_INTRA = 0, GST_VP9_REF_FRAME_LAST = 1, GST_VP9_REF_FRAME_GOLDEN = 2, GST_VP9_REF_FRAME_ALTREF = 3, GST_VP9_REF_FRAME_MAX = 4 } GstVp9RefFrameType;
Reference Frame types
Members
GST_VP9_REF_FRAME_INTRA
(0)
–
Intra reference frame
GST_VP9_REF_FRAME_LAST
(1)
–
Last Reference frame
GST_VP9_REF_FRAME_GOLDEN
(2)
–
Golden Reference frame
GST_VP9_REF_FRAME_ALTREF
(3)
–
Alternate Reference frame
GST_VP9_REF_FRAME_MAX
(4)
–
Since : 1.8
The results of the search are