static void gst_cmml_enc_finalize (GObject * object) { GstCmmlEnc *enc = GST_CMML_ENC (object); if (enc->tracks) { gst_cmml_track_list_destroy (enc->tracks); enc->tracks = NULL; } G_OBJECT_CLASS (parent_class)->finalize (object); }
static void gst_cmml_dec_finalize (GObject * object) { GstCmmlDec *dec = GST_CMML_DEC (object); if (dec->tracks) { gst_cmml_track_list_destroy (dec->tracks); dec->tracks = NULL; } G_OBJECT_CLASS (parent_class)->finalize (object); }
static GstStateChangeReturn gst_cmml_enc_change_state (GstElement * element, GstStateChange transition) { GstCmmlEnc *enc = GST_CMML_ENC (element); GstStateChangeReturn res; switch (transition) { case GST_STATE_CHANGE_READY_TO_PAUSED: enc->parser = gst_cmml_parser_new (GST_CMML_PARSER_ENCODE); enc->parser->user_data = enc; enc->parser->preamble_callback = (GstCmmlParserPreambleCallback) gst_cmml_enc_parse_preamble; enc->parser->head_callback = (GstCmmlParserHeadCallback) gst_cmml_enc_parse_tag_head; enc->parser->clip_callback = (GstCmmlParserClipCallback) gst_cmml_enc_parse_tag_clip; enc->parser->cmml_end_callback = (GstCmmlParserCmmlEndCallback) gst_cmml_enc_parse_end_tag; enc->tracks = gst_cmml_track_list_new (); enc->sent_headers = FALSE; enc->sent_eos = FALSE; enc->flow_return = GST_FLOW_OK; break; default: break; } res = parent_class->change_state (element, transition); switch (transition) { case GST_STATE_CHANGE_PAUSED_TO_READY: { gst_cmml_track_list_destroy (enc->tracks); enc->tracks = NULL; g_free (enc->preamble); enc->preamble = NULL; gst_cmml_parser_free (enc->parser); break; } default: break; } return res; }
static GstStateChangeReturn gst_cmml_dec_change_state (GstElement * element, GstStateChange transition) { GstCmmlDec *dec = GST_CMML_DEC (element); GstStateChangeReturn res; switch (transition) { case GST_STATE_CHANGE_READY_TO_PAUSED: dec->parser = gst_cmml_parser_new (GST_CMML_PARSER_DECODE); dec->parser->user_data = dec; dec->parser->preamble_callback = (GstCmmlParserPreambleCallback) gst_cmml_dec_parse_preamble; dec->parser->head_callback = (GstCmmlParserHeadCallback) gst_cmml_dec_parse_head; dec->parser->clip_callback = (GstCmmlParserClipCallback) gst_cmml_dec_parse_clip; dec->major = -1; dec->minor = -1; dec->granulerate_n = -1; dec->granulerate_d = -1; dec->granuleshift = 0; dec->granulepos = 0; dec->flow_return = GST_FLOW_OK; dec->sent_root = FALSE; dec->tracks = gst_cmml_track_list_new (); break; default: break; } res = parent_class->change_state (element, transition); switch (transition) { case GST_STATE_CHANGE_PAUSED_TO_READY: gst_cmml_parser_free (dec->parser); gst_cmml_track_list_destroy (dec->tracks); dec->tracks = NULL; break; default: break; } return res; }