flacparse: locate next sync code more efficiently
This commit is contained in:
parent
e6f840690d
commit
ebe8c69cc2
@ -633,6 +633,9 @@ gst_flac_parse_check_valid_frame (GstBaseParse * parse, GstBuffer * buffer,
|
|||||||
GstFlacParse *flacparse = GST_FLAC_PARSE (parse);
|
GstFlacParse *flacparse = GST_FLAC_PARSE (parse);
|
||||||
const guint8 *data = GST_BUFFER_DATA (buffer);
|
const guint8 *data = GST_BUFFER_DATA (buffer);
|
||||||
|
|
||||||
|
if (G_UNLIKELY (GST_BUFFER_SIZE (buffer) < 4))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
if (flacparse->state == GST_FLAC_PARSE_STATE_INIT) {
|
if (flacparse->state == GST_FLAC_PARSE_STATE_INIT) {
|
||||||
if (memcmp (GST_BUFFER_DATA (buffer), "fLaC", 4) == 0) {
|
if (memcmp (GST_BUFFER_DATA (buffer), "fLaC", 4) == 0) {
|
||||||
GST_DEBUG_OBJECT (flacparse, "fLaC marker found");
|
GST_DEBUG_OBJECT (flacparse, "fLaC marker found");
|
||||||
@ -682,8 +685,21 @@ gst_flac_parse_check_valid_frame (GstBaseParse * parse, GstBuffer * buffer,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
GST_DEBUG_OBJECT (flacparse, "Sync code not found");
|
GstByteReader reader = GST_BYTE_READER_INIT_FROM_BUFFER (buffer);
|
||||||
return FALSE;
|
gint off;
|
||||||
|
|
||||||
|
off = gst_byte_reader_masked_scan_uint32 (&reader, 0xfffc0000, 0xfff80000,
|
||||||
|
0, GST_BUFFER_SIZE (buffer));
|
||||||
|
|
||||||
|
if (off > 0) {
|
||||||
|
GST_DEBUG_OBJECT (parse, "Possible sync at buffer offset %d", off);
|
||||||
|
*skipsize = off;
|
||||||
|
return FALSE;
|
||||||
|
} else {
|
||||||
|
GST_DEBUG_OBJECT (flacparse, "Sync code not found");
|
||||||
|
*skipsize = GST_BUFFER_SIZE (buffer) - 3;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user