diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index 8e2799bcad3b539a2c954594464ad74df12e6565..a4e56dc23fdc9c62ea0408407551e8cb52f089a7 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -237,20 +237,18 @@ const uint8_t *ff_find_start_code(const uint8_t * restrict p, const uint8_t *end
         if(tmp == 0x100 || p==end)
             return p;
     }
-    p--;   // need to recheck or might miss one
-    end--; // we need the byte after 00 00 01 too
 
     while(p<end){
-        if     (p[ 0] > 1) p+= 3;
-        else if(p[-1]    ) p+= 2;
-        else if(p[-2]|(p[0]-1)) p++;
+        if     (p[-1] > 1      ) p+= 3;
+        else if(p[-2]          ) p+= 2;
+        else if(p[-3]|(p[-1]-1)) p++;
         else{
             p++;
             break;
         }
     }
 
-    p= FFMIN(p, end)-3;
+    p= FFMIN(p, end)-4;
     *state=  be2me_32(unaligned32(p));
 
     return p+4;