summaryrefslogtreecommitdiff
path: root/ext/schroedinger
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim.muller@collabora.co.uk>2012-01-13 00:11:54 +0000
committerTim-Philipp Müller <tim.muller@collabora.co.uk>2012-01-13 00:11:54 +0000
commit699677ed8ad7d763bfc70fbd9a23104fc18a18d7 (patch)
treea7b5943dfa3eecf143d19765657b05c65c475889 /ext/schroedinger
parent5b785f51caf454d819199079de00b4a3d0034677 (diff)
parent409816b5baaecdf61819c23475ad77d3ed9811b8 (diff)
downloadgstreamer-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.c9
-rw-r--r--ext/schroedinger/gstschroenc.c28
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;
}