Am 09.08.2016 um 15:56 schrieb Leo Liu:
This is the case when the "00 00 03" is very close to the beginning of
nal unit header

v2: move the check to rbsp init

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

diff --git a/src/gallium/auxiliary/vl/vl_rbsp.h 
b/src/gallium/auxiliary/vl/vl_rbsp.h
index 7867238..c175e23 100644
--- a/src/gallium/auxiliary/vl/vl_rbsp.h
+++ b/src/gallium/auxiliary/vl/vl_rbsp.h
@@ -61,7 +61,18 @@ static inline void vl_rbsp_init(struct vl_rbsp *rbsp, struct 
vl_vlc *nal, unsign
     while (vl_vlc_search_byte(nal, num_bits, 0x00)) {
        if (vl_vlc_peekbits(nal, 24) == 0x000001 ||
            vl_vlc_peekbits(nal, 32) == 0x00000001) {
+         unsigned valid;
+         int i;
+
           vl_vlc_limit(&rbsp->nal, bits_left - vl_vlc_bits_left(nal));
+         valid = vl_vlc_valid_bits(&rbsp->nal);
+         /* 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;
+            }
+         }

Mhm, I think that isn't 100% correct either.

We return inside the loop only when we find the next NAL unit after the current one, but if this is the last one that isn't the case.

           return;

I think that just replacing thing return with a break and moving the code after the while should do the trick.

Regards,
Christian.

        }
        vl_vlc_eatbits(nal, 8);



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

Reply via email to