mpeg2: optimize scan for start codes.
authorGwenole Beauchesne <gwenole.beauchesne@intel.com>
Wed, 9 Jan 2013 12:44:18 +0000 (13:44 +0100)
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>
Wed, 9 Jan 2013 15:05:18 +0000 (16:05 +0100)
commit3bc6078f32c4366a6c7839f63dfb35c2314bd5df
tree0c637f6c0daa112e8d508395b30e3d6530bac91c
parent0180ef635c53a9ed062cde7040be3a3971379e9a
mpeg2: optimize scan for start codes.

Accelerate scan for start codes by skipping up to 3 bytes per iteration.
A start code prefix is defined by the following bytes: 00 00 01. Thus,
for any group of 3 bytes (xx yy zz), we have the following possible cases:

  1. If zz != 1, this cannot be a start code, then skip 3 bytes;
  2. If yy != 0, this cannot be a start code, then skip 2 bytes;
  3. If xx != 0 or zz != 1, this cannot be a start code, then skip 1 byte;
  4. xx == 00, yy == 00, zz == 1, we have match!

This algorithm requires to peek bytes from the adapter. This increases the
amount of bytes copied to a temporary buffer, but this process is much faster
than scanning for all the bytes and using shift/masks. So, overall, this is
a win.
gst-libs/gst/vaapi/gstvaapidecoder_mpeg2.c