codecparsers: h264: fix skipping of unsupported SEI messages.

The payloadSize does not account for emulation prevention bytes. So,
just use nal_reader_skip() for skipping payload_size bits. It should
be possible to further optimize this code since the NAL reader shall
be aligned to byte boundary already.

Kill the now unused nal_reader_skip_to_next_byte() function.

https://bugzilla.gnome.org/show_bug.cgi?id=726829

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
This commit is contained in:
Gwenole Beauchesne 2014-03-21 17:07:19 +01:00
parent aa73624638
commit 1b42180817
3 changed files with 8 additions and 20 deletions

View file

@ -882,10 +882,14 @@ gst_h264_parser_parse_sei_message (GstH264NalParser * nalparser,
res = gst_h264_parser_parse_pic_timing (nalparser,
&sei->payload.pic_timing, nr);
} else {
/* Just consume payloadSize */
guint32 i;
for (i = 0; i < payloadSize; i++)
nal_reader_skip_to_next_byte (nr);
/* Just consume payloadSize bytes, which does not account for
emulation prevention bytes */
guint nbits = payload_size % 8;
while (payload_size > 0) {
nal_reader_skip (nr, nbits);
payload_size -= nbits;
nbits = 8;
}
res = GST_H264_PARSER_OK;
}

View file

@ -124,21 +124,6 @@ nal_reader_skip (NalReader * nr, guint nbits)
return TRUE;
}
inline gboolean
nal_reader_skip_to_next_byte (NalReader * nr)
{
if (nr->bits_in_cache == 0) {
if (G_LIKELY ((nr->size - nr->byte) > 0))
nr->byte++;
else
return FALSE;
}
nr->bits_in_cache = 0;
return TRUE;
}
inline guint
nal_reader_get_pos (const NalReader * nr)
{

View file

@ -57,7 +57,6 @@ void nal_reader_init (NalReader * nr, const guint8 * data, guint size);
gboolean nal_reader_read (NalReader * nr, guint nbits);
gboolean nal_reader_skip (NalReader * nr, guint nbits);
gboolean nal_reader_skip_to_next_byte (NalReader * nr);
guint nal_reader_get_pos (const NalReader * nr);
guint nal_reader_get_remaining (const NalReader * nr);
guint nal_reader_get_epb_count (const NalReader * nr);