Mercurial > libavcodec.hg
comparison h264.c @ 8446:489c8d652fff libavcodec
Optimize esc removal code.
author | michael |
---|---|
date | Tue, 23 Dec 2008 18:31:44 +0000 |
parents | 4fdaffd1ae1c |
children | 42198817a5ba |
comparison
equal
deleted
inserted
replaced
8445:8621deaff8dc | 8446:489c8d652fff |
---|---|
1421 if (dst == NULL){ | 1421 if (dst == NULL){ |
1422 return NULL; | 1422 return NULL; |
1423 } | 1423 } |
1424 | 1424 |
1425 //printf("decoding esc\n"); | 1425 //printf("decoding esc\n"); |
1426 si=di=0; | 1426 memcpy(dst, src, i); |
1427 while(si<length){ | 1427 si=di=i; |
1428 while(si+2<length){ | |
1428 //remove escapes (very rare 1:2^22) | 1429 //remove escapes (very rare 1:2^22) |
1429 if(si+2<length && src[si]==0 && src[si+1]==0 && src[si+2]<=3){ | 1430 if(src[si+2]>3){ |
1431 dst[di++]= src[si++]; | |
1432 dst[di++]= src[si++]; | |
1433 }else if(src[si]==0 && src[si+1]==0){ | |
1430 if(src[si+2]==3){ //escape | 1434 if(src[si+2]==3){ //escape |
1431 dst[di++]= 0; | 1435 dst[di++]= 0; |
1432 dst[di++]= 0; | 1436 dst[di++]= 0; |
1433 si+=3; | 1437 si+=3; |
1434 continue; | 1438 continue; |
1435 }else //next start code | 1439 }else //next start code |
1436 break; | 1440 goto nsc; |
1437 } | 1441 } |
1438 | 1442 |
1439 dst[di++]= src[si++]; | 1443 dst[di++]= src[si++]; |
1440 } | 1444 } |
1445 while(si<length) | |
1446 dst[di++]= src[si++]; | |
1447 nsc: | |
1441 | 1448 |
1442 memset(dst+di, 0, FF_INPUT_BUFFER_PADDING_SIZE); | 1449 memset(dst+di, 0, FF_INPUT_BUFFER_PADDING_SIZE); |
1443 | 1450 |
1444 *dst_length= di; | 1451 *dst_length= di; |
1445 *consumed= si + 1;//+1 for the header | 1452 *consumed= si + 1;//+1 for the header |