mpeg2dec: update for GstIndex removal

This commit is contained in:
Tim-Philipp Müller 2011-12-30 17:49:01 +00:00
parent add96c2567
commit 51794ce082
2 changed files with 1 additions and 131 deletions

View file

@ -81,9 +81,6 @@ GST_STATIC_PAD_TEMPLATE ("src",
static void gst_mpeg2dec_finalize (GObject * object);
static void gst_mpeg2dec_reset (GstMpeg2dec * mpeg2dec);
static void gst_mpeg2dec_set_index (GstElement * element, GstIndex * index);
static GstIndex *gst_mpeg2dec_get_index (GstElement * element);
static gboolean gst_mpeg2dec_src_event (GstPad * pad, GstObject * parent,
GstEvent * event);
@ -150,8 +147,6 @@ gst_mpeg2dec_class_init (GstMpeg2decClass * klass)
"Wim Taymans <wim.taymans@gmail.com>");
gstelement_class->change_state = gst_mpeg2dec_change_state;
gstelement_class->set_index = gst_mpeg2dec_set_index;
gstelement_class->get_index = gst_mpeg2dec_get_index;
GST_DEBUG_CATEGORY_INIT (mpeg2dec_debug, "mpeg2dec", 0,
"MPEG2 decoder element");
@ -192,8 +187,6 @@ gst_mpeg2dec_init (GstMpeg2dec * mpeg2dec)
mpeg2dec->error_count = 0;
mpeg2dec->can_allocate_aligned = TRUE;
GST_OBJECT_FLAG_SET (mpeg2dec, GST_ELEMENT_FLAG_INDEXABLE);
/* initialize the mpeg2dec acceleration */
}
@ -202,12 +195,6 @@ gst_mpeg2dec_finalize (GObject * object)
{
GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (object);
if (mpeg2dec->index) {
gst_object_unref (mpeg2dec->index);
mpeg2dec->index = NULL;
mpeg2dec->index_id = 0;
}
if (mpeg2dec->decoder) {
GST_DEBUG_OBJECT (mpeg2dec, "closing decoder");
mpeg2_close (mpeg2dec->decoder);
@ -223,12 +210,6 @@ gst_mpeg2dec_finalize (GObject * object)
static void
gst_mpeg2dec_reset (GstMpeg2dec * mpeg2dec)
{
if (mpeg2dec->index) {
gst_object_unref (mpeg2dec->index);
mpeg2dec->index = NULL;
mpeg2dec->index_id = 0;
}
/* reset the initial video state */
gst_video_info_init (&mpeg2dec->vinfo);
gst_segment_init (&mpeg2dec->segment, GST_FORMAT_UNDEFINED);
@ -253,33 +234,6 @@ gst_mpeg2dec_qos_reset (GstMpeg2dec * mpeg2dec)
GST_OBJECT_UNLOCK (mpeg2dec);
}
static void
gst_mpeg2dec_set_index (GstElement * element, GstIndex * index)
{
GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (element);
GST_OBJECT_LOCK (mpeg2dec);
if (mpeg2dec->index)
gst_object_unref (mpeg2dec->index);
mpeg2dec->index = NULL;
mpeg2dec->index_id = 0;
if (index) {
mpeg2dec->index = gst_object_ref (index);
}
GST_OBJECT_UNLOCK (mpeg2dec);
/* object lock might be taken again */
if (index)
gst_index_get_writer_id (index, GST_OBJECT (element), &mpeg2dec->index_id);
}
static GstIndex *
gst_mpeg2dec_get_index (GstElement * element)
{
GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (element);
return (mpeg2dec->index) ? gst_object_ref (mpeg2dec->index) : NULL;
}
#if 0
static GstFlowReturn
gst_mpeg2dec_crop_buffer (GstMpeg2dec * dec, GstBuffer ** buf)
@ -922,14 +876,6 @@ handle_slice (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info)
picture->nb_fields, GST_BUFFER_OFFSET (outbuf),
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)));
if (mpeg2dec->index) {
gst_index_add_association (mpeg2dec->index, mpeg2dec->index_id,
(key_frame ? GST_ASSOCIATION_FLAG_KEY_UNIT :
GST_ASSOCIATION_FLAG_DELTA_UNIT),
GST_FORMAT_BYTES, GST_BUFFER_OFFSET (outbuf),
GST_FORMAT_TIME, GST_BUFFER_TIMESTAMP (outbuf), 0);
}
if (picture->flags & PIC_FLAG_SKIP)
goto skip;
@ -1286,9 +1232,6 @@ gst_mpeg2dec_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
break;
}
case GST_EVENT_EOS:
if (mpeg2dec->index && mpeg2dec->closed) {
gst_index_commit (mpeg2dec->index, mpeg2dec->index_id);
}
ret = gst_pad_push_event (mpeg2dec->srcpad, event);
break;
default:
@ -1562,73 +1505,6 @@ gst_mpeg2dec_get_event_masks (GstPad * pad)
}
#endif
static gboolean
index_seek (GstPad * pad, GstEvent * event)
{
GstIndexEntry *entry;
GstMpeg2dec *mpeg2dec;
gdouble rate;
GstFormat format;
GstSeekFlags flags;
GstSeekType cur_type, stop_type;
gint64 cur, stop;
mpeg2dec = GST_MPEG2DEC (GST_PAD_PARENT (pad));
gst_event_parse_seek (event, &rate, &format, &flags,
&cur_type, &cur, &stop_type, &stop);
entry = gst_index_get_assoc_entry (mpeg2dec->index, mpeg2dec->index_id,
GST_INDEX_LOOKUP_BEFORE, GST_ASSOCIATION_FLAG_KEY_UNIT, format, cur);
if ((entry) && gst_pad_is_linked (mpeg2dec->sinkpad)) {
const GstFormat *peer_formats, *try_formats;
/* since we know the exact byteoffset of the frame, make sure to seek on bytes first */
const GstFormat try_all_formats[] = {
GST_FORMAT_BYTES,
GST_FORMAT_TIME,
0
};
try_formats = try_all_formats;
#if 0
peer_formats = gst_pad_get_formats (GST_PAD_PEER (mpeg2dec->sinkpad));
#else
peer_formats = try_all_formats; /* FIXE ME */
#endif
while (gst_formats_contains (peer_formats, *try_formats)) {
gint64 value;
if (gst_index_entry_assoc_map (entry, *try_formats, &value)) {
GstEvent *seek_event;
GST_DEBUG_OBJECT (mpeg2dec, "index %s %" G_GINT64_FORMAT
" -> %s %" G_GINT64_FORMAT,
gst_format_get_details (format)->nick,
cur, gst_format_get_details (*try_formats)->nick, value);
/* lookup succeeded, create the seek */
seek_event =
gst_event_new_seek (rate, *try_formats, flags, cur_type, value,
stop_type, stop);
/* do the seek */
if (gst_pad_push_event (mpeg2dec->sinkpad, seek_event)) {
/* seek worked, we're done, loop will exit */
#if 0
mpeg2dec->segment_start = GST_EVENT_SEEK_OFFSET (event);
#endif
return TRUE;
}
}
try_formats++;
}
}
return FALSE;
}
static gboolean
normal_seek (GstPad * pad, GstEvent * event)
{
@ -1713,10 +1589,7 @@ gst_mpeg2dec_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
case GST_EVENT_SEEK:{
gst_event_ref (event);
if (!(res = gst_pad_push_event (mpeg2dec->sinkpad, event))) {
if (mpeg2dec->index)
res = index_seek (pad, event);
else
res = normal_seek (pad, event);
res = normal_seek (pad, event); /* FIXME: get rid of seeking code */
}
gst_event_unref (event);
break;

View file

@ -103,9 +103,6 @@ struct _GstMpeg2dec {
guint64 offset;
gboolean need_sequence;
GstIndex *index;
gint index_id;
gint error_count;
gboolean can_allocate_aligned;