Revert "mpeg4videoparse: set 0 duration when vop_coded is 0"

This reverts commit d3219a261a.

vop_coded 0 means that the previous frame should be repeated,
so it should have valid duration after all.

https://bugzilla.gnome.org/show_bug.cgi?id=683169
This commit is contained in:
Tim-Philipp Müller 2013-02-14 09:40:08 +00:00
parent f8139b2b99
commit 829076358e
2 changed files with 2 additions and 48 deletions

View file

@ -289,44 +289,6 @@ gst_mpeg4vparse_process_config (GstMpeg4VParse * mp4vparse,
return TRUE;
}
static gboolean
gst_mpeg4vparse_get_vop_coded (GstMpeg4VParse * mp4vparse, const guint8 * data,
gint vop_offset, gsize size, gsize frame_size)
{
if (frame_size > 9) { /* assuming bigger frame will always have vop_coded (saves some parsing) */
return TRUE;
} else if (size > vop_offset + 3) {
GstBitReader reader;
guint8 value;
gst_bit_reader_init (&reader, data + vop_offset + 1, size - vop_offset);
gst_bit_reader_skip (&reader, 2); /* VOP_coding_type */
/* modulo_time_base (ends with 0) */
while (gst_bit_reader_get_bits_uint8 (&reader, &value, 1) && value);
/* marker_bit */
g_return_val_if_fail (gst_bit_reader_get_bits_uint8 (&reader, &value, 1)
&& value, TRUE);
/* VOP_time_increment */
gst_bit_reader_skip (&reader, mp4vparse->vol.vop_time_increment_bits);
/* marker_bit */
g_return_val_if_fail (gst_bit_reader_get_bits_uint8 (&reader, &value, 1)
&& value, TRUE);
/* VOP_coded */
if (!gst_bit_reader_get_bits_uint8 (&reader, &value, 1)) {
return FALSE;
}
return value;
}
return FALSE;
}
/* caller guarantees at least start code in @buf at @off */
static gboolean
gst_mpeg4vparse_process_sc (GstMpeg4VParse * mp4vparse, GstMpeg4Packet * packet,
@ -346,12 +308,8 @@ gst_mpeg4vparse_process_sc (GstMpeg4VParse * mp4vparse, GstMpeg4Packet * packet,
GST_WARNING_OBJECT (mp4vparse, "no data following VOP startcode");
mp4vparse->intra_frame = FALSE;
}
mp4vparse->vop_coded =
gst_mpeg4vparse_get_vop_coded (mp4vparse, packet->data,
mp4vparse->vop_offset, size, packet->offset - 3);
GST_LOG_OBJECT (mp4vparse,
"ending frame of size %d, is intra %d, vop_coded %d",
packet->offset - 3, mp4vparse->intra_frame, mp4vparse->vop_coded);
GST_LOG_OBJECT (mp4vparse, "ending frame of size %d, is intra %d",
packet->offset - 3, mp4vparse->intra_frame);
return TRUE;
}
@ -644,9 +602,6 @@ gst_mpeg4vparse_parse_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
else
GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DELTA_UNIT);
if (!mp4vparse->vop_coded) /* buffer without VOP_coded has no data */
GST_BUFFER_DURATION (buffer) = 0;
if (G_UNLIKELY (mp4vparse->drop && !mp4vparse->config)) {
GST_LOG_OBJECT (mp4vparse, "dropping frame as no config yet");
return GST_BASE_PARSE_FLOW_DROPPED;

View file

@ -53,7 +53,6 @@ struct _GstMpeg4VParse {
gboolean vo_found;
gboolean config_found;
gboolean intra_frame;
gboolean vop_coded;
gboolean update_caps;
GstMpeg4VisualObject vo;