On 08/09/2016 04:26 AM, Christian König wrote:
Am 08.08.2016 um 22:10 schrieb Leo Liu:
This is the case when the "00 00 03" is very close to the beginning of
nal unit header

I see where the problem is, but the fix is incorrect.

You always search for the emulation prevention three byte even when the previous fill has done so already. So it could happen in theory that you revert the escaping twice, e.g. remove valid bits.

Right. Will send v2.

Thanks,
Leo


You need to add this extra check to the end of vl_rbsp_init() after we searched for the end of the NAL unit.

Regards,
Christian.


Signed-off-by: Leo Liu <leo....@amd.com>
---
  src/gallium/auxiliary/vl/vl_rbsp.h | 10 +++++++++-
  1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/gallium/auxiliary/vl/vl_rbsp.h b/src/gallium/auxiliary/vl/vl_rbsp.h
index 7867238..c134d31 100644
--- a/src/gallium/auxiliary/vl/vl_rbsp.h
+++ b/src/gallium/auxiliary/vl/vl_rbsp.h
@@ -77,8 +77,16 @@ static inline void vl_rbsp_fillbits(struct vl_rbsp *rbsp)
     unsigned i, bits;
       /* abort if we still have enough bits */
-   if (valid >= 32)
+   if (valid >= 32) {
+      /* search for the emulation prevention three byte */
+      for (i = 24; i <= valid; i += 8) {
+         if ((vl_vlc_peekbits(&rbsp->nal, i) & 0xffffff) == 0x3) {
+            vl_vlc_removebits(&rbsp->nal, i - 8, 8);
+            i += 8;
+         }
+      }
        return;
+   }
       vl_vlc_fillbits(&rbsp->nal);



_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to