diff options
author | Tim-Philipp Müller <tim.muller@collabora.co.uk> | 2012-01-13 00:11:54 +0000 |
---|---|---|
committer | Tim-Philipp Müller <tim.muller@collabora.co.uk> | 2012-01-13 00:11:54 +0000 |
commit | 699677ed8ad7d763bfc70fbd9a23104fc18a18d7 (patch) | |
tree | a7b5943dfa3eecf143d19765657b05c65c475889 /ext/schroedinger | |
parent | 5b785f51caf454d819199079de00b4a3d0034677 (diff) | |
parent | 409816b5baaecdf61819c23475ad77d3ed9811b8 (diff) | |
download | gstreamer-plugins-bad-699677ed8ad7d763bfc70fbd9a23104fc18a18d7.tar.gz |
Merge remote-tracking branch 'origin/master' into 0.11
Diffstat (limited to 'ext/schroedinger')
-rw-r--r-- | ext/schroedinger/gstschrodec.c | 9 | ||||
-rw-r--r-- | ext/schroedinger/gstschroenc.c | 28 |
2 files changed, 22 insertions, 15 deletions
diff --git a/ext/schroedinger/gstschrodec.c b/ext/schroedinger/gstschrodec.c index 126ef1fed..50bb40480 100644 --- a/ext/schroedinger/gstschrodec.c +++ b/ext/schroedinger/gstschrodec.c @@ -55,7 +55,7 @@ struct _GstSchroDec SchroDecoder *decoder; - GstBuffer *seq_header_buffer; + gboolean seq_header_buffer_seen; }; struct _GstSchroDecClass @@ -308,8 +308,7 @@ parse_sequence_header (GstSchroDec * schro_dec, guint8 * data, int size) state = gst_base_video_decoder_get_state (GST_BASE_VIDEO_DECODER (schro_dec)); - schro_dec->seq_header_buffer = gst_buffer_new_and_alloc (size); - memcpy (GST_BUFFER_DATA (schro_dec->seq_header_buffer), data, size); + schro_dec->seq_header_buffer_seen = TRUE; ret = schro_parse_decode_sequence_header (data + 13, size - 13, &video_format); @@ -462,7 +461,7 @@ gst_schro_dec_parse_data (GstBaseVideoDecoder * base_video_decoder, g_free (data); } - if (schro_decoder->seq_header_buffer == NULL) { + if (!schro_decoder->seq_header_buffer_seen) { gst_adapter_flush (base_video_decoder->input_adapter, next); return GST_FLOW_OK; } @@ -572,6 +571,8 @@ gst_schro_dec_process (GstSchroDec * schro_dec, gboolean eos) schro_frame_unref (schro_frame); } + if (tag) + schro_tag_free (tag); if (!eos) { go = FALSE; } diff --git a/ext/schroedinger/gstschroenc.c b/ext/schroedinger/gstschroenc.c index beda4eac9..c2064d3ca 100644 --- a/ext/schroedinger/gstschroenc.c +++ b/ext/schroedinger/gstschroenc.c @@ -101,6 +101,7 @@ static GstFlowReturn gst_schro_enc_handle_frame (GstBaseVideoEncoder * base_video_encoder, GstVideoFrame * frame); static GstFlowReturn gst_schro_enc_shape_output (GstBaseVideoEncoder * base_video_encoder, GstVideoFrame * frame); +static void gst_schro_enc_finalize (GObject * object); static GstStaticPadTemplate gst_schro_enc_sink_template = GST_STATIC_PAD_TEMPLATE ("sink", @@ -172,6 +173,7 @@ gst_schro_enc_class_init (GstSchroEncClass * klass) gobject_class->set_property = gst_schro_enc_set_property; gobject_class->get_property = gst_schro_enc_get_property; + gobject_class->finalize = gst_schro_enc_finalize; for (i = 0; i < schro_encoder_get_n_settings (); i++) { const SchroEncoderSetting *setting; @@ -231,7 +233,22 @@ gst_schro_enc_init (GstSchroEnc * schro_enc, GstSchroEncClass * klass) schro_enc->video_format = schro_encoder_get_video_format (schro_enc->encoder); } +static void +gst_schro_enc_finalize (GObject * object) +{ + GstSchroEnc *schro_enc = GST_SCHRO_ENC (object); + + if (schro_enc->encoder) { + schro_encoder_free (schro_enc->encoder); + schro_enc->encoder = NULL; + } + if (schro_enc->video_format) { + g_free (schro_enc->video_format); + schro_enc->video_format = NULL; + } + G_OBJECT_CLASS (parent_class)->finalize (object); +} static gboolean gst_schro_enc_set_format (GstBaseVideoEncoder * base_video_encoder, @@ -423,17 +440,6 @@ gst_schro_enc_start (GstBaseVideoEncoder * base_video_encoder) static gboolean gst_schro_enc_stop (GstBaseVideoEncoder * base_video_encoder) { - GstSchroEnc *schro_enc = GST_SCHRO_ENC (base_video_encoder); - - if (schro_enc->encoder) { - schro_encoder_free (schro_enc->encoder); - schro_enc->encoder = NULL; - } - if (schro_enc->video_format) { - g_free (schro_enc->video_format); - schro_enc->video_format = NULL; - } - return TRUE; } |