]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/commitdiff
Optimize esc removial code.
authormichael <michael@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Tue, 23 Dec 2008 18:31:44 +0000 (18:31 +0000)
committermichael <michael@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Tue, 23 Dec 2008 18:31:44 +0000 (18:31 +0000)
git-svn-id: file:///var/local/repositories/ffmpeg/trunk@16294 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b

libavcodec/h264.c

index ab206a2b6f4e01a30f65640fe45ec4a47e8bcc6a..b3d3575a9d4bf86447d552b792917ca92817f4bd 100644 (file)
@@ -1423,21 +1423,28 @@ static const uint8_t *decode_nal(H264Context *h, const uint8_t *src, int *dst_le
     }
 
 //printf("decoding esc\n");
-    si=di=0;
-    while(si<length){
+    memcpy(dst, src, i);
+    si=di=i;
+    while(si+2<length){
         //remove escapes (very rare 1:2^22)
-        if(si+2<length && src[si]==0 && src[si+1]==0 && src[si+2]<=3){
+        if(src[si+2]>3){
+            dst[di++]= src[si++];
+            dst[di++]= src[si++];
+        }else if(src[si]==0 && src[si+1]==0){
             if(src[si+2]==3){ //escape
                 dst[di++]= 0;
                 dst[di++]= 0;
                 si+=3;
                 continue;
             }else //next start code
-                break;
+                goto nsc;
         }
 
         dst[di++]= src[si++];
     }
+    while(si<length)
+        dst[di++]= src[si++];
+nsc:
 
     memset(dst+di, 0, FF_INPUT_BUFFER_PADDING_SIZE);