Forgot to attach. -------------- next part -------------- Index: vc1.c =================================================================== --- libavcodec/vc1.c (revision 7590) +++ libavcodec/vc1.c (working copy) @@ -4222,10 +4222,29 @@ //for advanced profile we need to unescape buffer if (avctx->codec_id == CODEC_ID_VC1) { - int i, buf_size2; + int i, buf_size2, skip = 0; buf2 = av_malloc(buf_size + FF_INPUT_BUFFER_PADDING_SIZE); buf_size2 = 0; - for(i = 0; i < buf_size; i++) { + // test if frame starts with some escape and seek to frame start + if(!buf[0] && !buf[1] && buf[2] == 1 && buf[3] != 3){ + if(buf[3] == 0x0D || buf[3] == 0x0C){ + skip = 4; + }else{ + int code; + // search for frame/field start code + code = AV_RB32(buf); + while(skip < buf_size - 4){ + code <<= 8; + code |= buf[skip++]; + if(code == 0x0000010D || code == 0x0000010C) break; + } + if(skip == buf_size - 4){ + av_log(avctx, AV_LOG_ERROR, "Frame begins with marker but no frame/field marker found\n"); + return -1; + } + } + } + for(i = skip; i < buf_size; i++) { if(buf[i] == 3 && i >= 2 && !buf[i-1] && !buf[i-2] && i < buf_size-1 && buf[i+1] < 4) { buf2[buf_size2++] = buf[i+1]; i++;
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4