[FFmpeg-cvslog] r16294 - trunk/libavcodec/h264.c
michael
subversion
Tue Dec 23 19:31:44 CET 2008
Author: michael
Date: Tue Dec 23 19:31:44 2008
New Revision: 16294
Log:
Optimize esc removial code.
Modified:
trunk/libavcodec/h264.c
Modified: trunk/libavcodec/h264.c
==============================================================================
--- trunk/libavcodec/h264.c Tue Dec 23 19:27:06 2008 (r16293)
+++ trunk/libavcodec/h264.c Tue Dec 23 19:31:44 2008 (r16294)
@@ -1423,21 +1423,28 @@ static const uint8_t *decode_nal(H264Con
}
//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);
More information about the ffmpeg-cvslog
mailing list