mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-08 16:35:40 +00:00
codecparsers: vp9parser: use single allocation for parser structs
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3790>
This commit is contained in:
parent
d1e3941a89
commit
4051581ed8
2 changed files with 24 additions and 18 deletions
|
@ -59,7 +59,7 @@ static gboolean initialized = FALSE;
|
||||||
#define gst_vp9_read_bit(br) gst_bit_reader_get_bits_uint8_unchecked(br, 1)
|
#define gst_vp9_read_bit(br) gst_bit_reader_get_bits_uint8_unchecked(br, 1)
|
||||||
#define gst_vp9_read_bits(br, bits) gst_bit_reader_get_bits_uint32_unchecked(br, bits)
|
#define gst_vp9_read_bits(br, bits) gst_bit_reader_get_bits_uint32_unchecked(br, bits)
|
||||||
|
|
||||||
#define GST_VP9_PARSER_GET_PRIVATE(parser) ((GstVp9ParserPrivate *)(parser->priv))
|
#define GST_VP9_PARSER_GET_PRIVATE(parser) ((GstVp9ParserPrivate *)(parser))
|
||||||
|
|
||||||
typedef struct _ReferenceSize
|
typedef struct _ReferenceSize
|
||||||
{
|
{
|
||||||
|
@ -69,6 +69,11 @@ typedef struct _ReferenceSize
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
/* Public part of the struct */
|
||||||
|
GstVp9Parser parser;
|
||||||
|
|
||||||
|
/* Private part of the struct for tracking state variables across frames */
|
||||||
|
|
||||||
/* for loop filters */
|
/* for loop filters */
|
||||||
gint8 ref_deltas[GST_VP9_MAX_REF_LF_DELTAS];
|
gint8 ref_deltas[GST_VP9_MAX_REF_LF_DELTAS];
|
||||||
gint8 mode_deltas[GST_VP9_MAX_MODE_LF_DELTAS];
|
gint8 mode_deltas[GST_VP9_MAX_MODE_LF_DELTAS];
|
||||||
|
@ -587,16 +592,18 @@ setup_past_independence (GstVp9Parser * parser,
|
||||||
static void
|
static void
|
||||||
gst_vp9_parser_reset (GstVp9Parser * parser)
|
gst_vp9_parser_reset (GstVp9Parser * parser)
|
||||||
{
|
{
|
||||||
GstVp9ParserPrivate *priv = parser->priv;
|
GstVp9ParserPrivate *priv = GST_VP9_PARSER_GET_PRIVATE (parser);
|
||||||
|
GstVp9Parser saved_vals = *parser;
|
||||||
parser->priv = NULL;
|
|
||||||
memset (parser->mb_segment_tree_probs, 0,
|
|
||||||
sizeof (parser->mb_segment_tree_probs));
|
|
||||||
memset (parser->segment_pred_probs, 0, sizeof (parser->segment_pred_probs));
|
|
||||||
memset (parser->segmentation, 0, sizeof (parser->segmentation));
|
|
||||||
|
|
||||||
|
/* Reset almost everything in private struct and public struct */
|
||||||
memset (priv, 0, sizeof (GstVp9ParserPrivate));
|
memset (priv, 0, sizeof (GstVp9ParserPrivate));
|
||||||
parser->priv = priv;
|
|
||||||
|
/* Restore the fields we want to keep as-is */
|
||||||
|
parser->subsampling_x = saved_vals.subsampling_x;
|
||||||
|
parser->subsampling_y = saved_vals.subsampling_y;
|
||||||
|
parser->bit_depth = saved_vals.bit_depth;
|
||||||
|
parser->color_space = saved_vals.color_space;
|
||||||
|
parser->color_range = saved_vals.color_range;
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstVp9ParserResult
|
static GstVp9ParserResult
|
||||||
|
@ -631,13 +638,14 @@ gst_vp9_parser_update (GstVp9Parser * parser, GstVp9FrameHdr * const frame_hdr)
|
||||||
GstVp9Parser *
|
GstVp9Parser *
|
||||||
gst_vp9_parser_new (void)
|
gst_vp9_parser_new (void)
|
||||||
{
|
{
|
||||||
|
GstVp9ParserPrivate *priv;
|
||||||
GstVp9Parser *parser;
|
GstVp9Parser *parser;
|
||||||
|
|
||||||
INITIALIZE_DEBUG_CATEGORY;
|
INITIALIZE_DEBUG_CATEGORY;
|
||||||
GST_DEBUG ("Create VP9 Parser");
|
GST_DEBUG ("Create VP9 Parser");
|
||||||
|
|
||||||
parser = g_new0 (GstVp9Parser, 1);
|
priv = g_new0 (GstVp9ParserPrivate, 1);
|
||||||
parser->priv = g_new0 (GstVp9ParserPrivate, 1);
|
parser = &priv->parser;
|
||||||
parser->subsampling_x = parser->subsampling_y = -1;
|
parser->subsampling_x = parser->subsampling_y = -1;
|
||||||
|
|
||||||
return parser;
|
return parser;
|
||||||
|
@ -655,11 +663,8 @@ void
|
||||||
gst_vp9_parser_free (GstVp9Parser * parser)
|
gst_vp9_parser_free (GstVp9Parser * parser)
|
||||||
{
|
{
|
||||||
if (parser) {
|
if (parser) {
|
||||||
if (parser->priv) {
|
GstVp9ParserPrivate *priv = GST_VP9_PARSER_GET_PRIVATE (parser);
|
||||||
g_free (parser->priv);
|
g_free (priv);
|
||||||
parser->priv = NULL;
|
|
||||||
}
|
|
||||||
g_free (parser);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -490,8 +490,9 @@ struct _GstVp9Segmentation
|
||||||
*/
|
*/
|
||||||
struct _GstVp9Parser
|
struct _GstVp9Parser
|
||||||
{
|
{
|
||||||
/* private struct for tracking state variables across frames */
|
#ifndef GST_REMOVE_DEPRECATED
|
||||||
void *priv;
|
void *priv; /* unused, kept around for ABI compatibility */
|
||||||
|
#endif
|
||||||
|
|
||||||
gint subsampling_x;
|
gint subsampling_x;
|
||||||
gint subsampling_y;
|
gint subsampling_y;
|
||||||
|
|
Loading…
Reference in a new issue