Commit 38db14cb authored by Michael Smith's avatar Michael Smith
Browse files

ext/theora/: Track initialisation state; don't try to use encoder state if...

ext/theora/: Track initialisation state; don't try to use encoder state if we're not initialised (it'll segfault).

Original commit message from CVS:
* ext/theora/gsttheoraenc.h:
* ext/theora/theoraenc.c: (theora_enc_sink_setcaps),
(theora_enc_sink_event), (theora_enc_change_state):
Track initialisation state; don't try to use encoder state if we're
not initialised (it'll segfault).
parent 674dcc1b
2007-04-19 Michael Smith <msmith@fluendo.com>
* ext/theora/gsttheoraenc.h:
* ext/theora/theoraenc.c: (theora_enc_sink_setcaps),
(theora_enc_sink_event), (theora_enc_change_state):
Track initialisation state; don't try to use encoder state if we're
not initialised (it'll segfault).
2007-04-18 Stefan Kost <ensonic@users.sf.net>
 
* tests/check/pipelines/.cvsignore:
common @ 765d03a8
Subproject commit 380281f0da9caa065cfe99a458b3538cc3f5d71a
Subproject commit 765d03a88492fb4ac81d70457f671f3a109e93de
......@@ -72,6 +72,7 @@ struct _GstTheoraEnc
theora_state state;
theora_info info;
theora_comment comment;
gboolean initialised;
gboolean center;
GstTheoraEncBorderMode border;
......
......@@ -396,6 +396,7 @@ theora_enc_sink_setcaps (GstPad * pad, GstCaps * caps)
enc->info.keyframe_frequency_force, enc->granule_shift);
theora_enc_reset (enc);
enc->initialised = TRUE;
gst_object_unref (enc);
......@@ -550,14 +551,17 @@ theora_enc_sink_event (GstPad * pad, GstEvent * event)
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_EOS:
/* push last packet with eos flag */
while (theora_encode_packetout (&enc->state, 1, &op)) {
/* See comment in the chain function */
GstClockTime next_time = theora_granule_time (&enc->state,
granulepos_add (op.granulepos, 1, enc->granule_shift)) * GST_SECOND;
theora_push_packet (enc, &op, enc->next_ts, next_time - enc->next_ts);
enc->next_ts = next_time;
if (enc->initialised) {
/* push last packet with eos flag */
while (theora_encode_packetout (&enc->state, 1, &op)) {
/* See comment in the chain function */
GstClockTime next_time = theora_granule_time (&enc->state,
granulepos_add (op.granulepos, 1, enc->granule_shift)) *
GST_SECOND;
theora_push_packet (enc, &op, enc->next_ts, next_time - enc->next_ts);
enc->next_ts = next_time;
}
}
res = gst_pad_push_event (enc->srcpad, event);
break;
......@@ -945,6 +949,7 @@ theora_enc_change_state (GstElement * element, GstStateChange transition)
theora_info_clear (&enc->info);
theora_enc_clear (enc);
enc->initialised = FALSE;
break;
case GST_STATE_CHANGE_READY_TO_NULL:
break;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment