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

View File

@ -124,21 +124,6 @@ nal_reader_skip (NalReader * nr, guint nbits)
return TRUE; 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 inline guint
nal_reader_get_pos (const NalReader * nr) 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_read (NalReader * nr, guint nbits);
gboolean nal_reader_skip (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_pos (const NalReader * nr);
guint nal_reader_get_remaining (const NalReader * nr); guint nal_reader_get_remaining (const NalReader * nr);
guint nal_reader_get_epb_count (const NalReader * nr); guint nal_reader_get_epb_count (const NalReader * nr);