mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-18 14:26:43 +00:00
theora: remove support for outdated granulepos hack
This is in preparation to switching to switching to the new Theora API https://bugzilla.gnome.org/show_bug.cgi?id=594729
This commit is contained in:
parent
56203876e4
commit
4159cdfe9c
2 changed files with 3 additions and 33 deletions
|
@ -606,7 +606,7 @@ AG_GST_CHECK_FEATURE(THEORA, [Xiph Theora video codec], theora, [
|
||||||
|
|
||||||
AG_GST_PKG_CHECK_MODULES(THEORA, theoradec theoraenc)
|
AG_GST_PKG_CHECK_MODULES(THEORA, theoradec theoraenc)
|
||||||
if test x$HAVE_THEORA = xno; then
|
if test x$HAVE_THEORA = xno; then
|
||||||
AG_GST_PKG_CHECK_MODULES(THEORA, theora >= 1.0alpha5)
|
AG_GST_PKG_CHECK_MODULES(THEORA, theora >= 1.0beta1)
|
||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
|
@ -65,15 +65,6 @@
|
||||||
#define GST_CAT_DEFAULT theoraenc_debug
|
#define GST_CAT_DEFAULT theoraenc_debug
|
||||||
GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
|
GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
|
||||||
|
|
||||||
/* With libtheora-1.0beta1 the granulepos scheme was changed:
|
|
||||||
* where earlier the granulepos refered to the index/beginning
|
|
||||||
* of a frame, it now refers to the end, which matches the use
|
|
||||||
* in vorbis/speex. There don't seem to be defines for the
|
|
||||||
* theora version we're compiling against, so we'll just use
|
|
||||||
* a run-time check for now. See theora_enc_get_ogg_packet_end_time().
|
|
||||||
*/
|
|
||||||
static gboolean use_old_granulepos;
|
|
||||||
|
|
||||||
#define GST_TYPE_BORDER_MODE (gst_border_mode_get_type())
|
#define GST_TYPE_BORDER_MODE (gst_border_mode_get_type())
|
||||||
static GType
|
static GType
|
||||||
gst_border_mode_get_type (void)
|
gst_border_mode_get_type (void)
|
||||||
|
@ -289,8 +280,6 @@ gst_theora_enc_class_init (GstTheoraEncClass * klass)
|
||||||
|
|
||||||
gstelement_class->change_state = theora_enc_change_state;
|
gstelement_class->change_state = theora_enc_change_state;
|
||||||
GST_DEBUG_CATEGORY_INIT (theoraenc_debug, "theoraenc", 0, "Theora encoder");
|
GST_DEBUG_CATEGORY_INIT (theoraenc_debug, "theoraenc", 0, "Theora encoder");
|
||||||
|
|
||||||
use_old_granulepos = (theora_version_number () <= 0x00030200);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -662,25 +651,6 @@ theora_set_header_on_caps (GstCaps * caps, GstBuffer * buf1,
|
||||||
return caps;
|
return caps;
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstClockTime
|
|
||||||
theora_enc_get_ogg_packet_end_time (GstTheoraEnc * enc, ogg_packet * op)
|
|
||||||
{
|
|
||||||
ogg_int64_t end_granule;
|
|
||||||
|
|
||||||
/* FIXME: remove this hack once we depend on libtheora >= 1.0beta1 */
|
|
||||||
if (G_UNLIKELY (use_old_granulepos)) {
|
|
||||||
/* This is where we hack around theora's broken idea of what granulepos
|
|
||||||
* is -- normally we wouldn't need to add the 1, because granulepos
|
|
||||||
* should be the presentation time of the last sample in the packet, but
|
|
||||||
* theora starts with 0 instead of 1... (update: this only applies to old
|
|
||||||
* bitstream/theora versions, this is fixed with bitstream version 3.2.1) */
|
|
||||||
end_granule = granulepos_add (op->granulepos, 1, enc->granule_shift);
|
|
||||||
} else {
|
|
||||||
end_granule = op->granulepos;
|
|
||||||
}
|
|
||||||
return theora_granule_time (&enc->state, end_granule) * GST_SECOND;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
theora_enc_force_keyframe (GstTheoraEnc * enc)
|
theora_enc_force_keyframe (GstTheoraEnc * enc)
|
||||||
{
|
{
|
||||||
|
@ -727,7 +697,7 @@ theora_enc_sink_event (GstPad * pad, GstEvent * event)
|
||||||
/* push last packet with eos flag, should not be called */
|
/* push last packet with eos flag, should not be called */
|
||||||
while (theora_encode_packetout (&enc->state, 1, &op)) {
|
while (theora_encode_packetout (&enc->state, 1, &op)) {
|
||||||
GstClockTime next_time =
|
GstClockTime next_time =
|
||||||
theora_enc_get_ogg_packet_end_time (enc, &op);
|
theora_granule_time (&enc->state, op.granulepos) * GST_SECOND;
|
||||||
|
|
||||||
theora_push_packet (enc, &op, GST_CLOCK_TIME_NONE, enc->next_ts,
|
theora_push_packet (enc, &op, GST_CLOCK_TIME_NONE, enc->next_ts,
|
||||||
next_time - enc->next_ts);
|
next_time - enc->next_ts);
|
||||||
|
@ -1120,7 +1090,7 @@ theora_enc_chain (GstPad * pad, GstBuffer * buffer)
|
||||||
while (theora_encode_packetout (&enc->state, 0, &op)) {
|
while (theora_encode_packetout (&enc->state, 0, &op)) {
|
||||||
GstClockTime next_time;
|
GstClockTime next_time;
|
||||||
|
|
||||||
next_time = theora_enc_get_ogg_packet_end_time (enc, &op);
|
next_time = theora_granule_time (&enc->state, op.granulepos) * GST_SECOND;
|
||||||
|
|
||||||
ret =
|
ret =
|
||||||
theora_push_packet (enc, &op, timestamp, enc->next_ts,
|
theora_push_packet (enc, &op, timestamp, enc->next_ts,
|
||||||
|
|
Loading…
Reference in a new issue