mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 03:35:21 +00:00
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).
This commit is contained in:
parent
674dcc1b4e
commit
38db14cb22
4 changed files with 22 additions and 8 deletions
|
@ -1,3 +1,11 @@
|
|||
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:
|
||||
|
|
2
common
2
common
|
@ -1 +1 @@
|
|||
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;
|
||||
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;
|
||||
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;
|
||||
|
|
Loading…
Reference in a new issue