+ // Non-video streams can emulate start codes, so we need
+ // to inspect PES packets and skip over their data
+ // sections to avoid mis-detection of the next pack header.
+ if ( ( strt_code >> 8 ) == 0x000001 &&
+ ( strt_code & 0xff ) >= 0xbb )
+ {
+ int len = 0;
+ c = getc_unlocked( src_stream->file_handle );
+ if ( c == EOF )
+ break;
+ len = c << 8;
+ c = getc_unlocked( src_stream->file_handle );
+ if ( c == EOF )
+ break;
+ len |= c;
+ if ( cp+len+2 > ep )
+ {
+ // need to expand the buffer
+ int curSize = cp - b->data;
+ if ( curSize * 2 > curSize+len+2 )
+ hb_buffer_realloc( b, curSize * 2 );
+ else
+ hb_buffer_realloc( b, curSize + len + 2 );
+ cp = b->data + curSize;
+ ep = b->data + b->alloc;
+ }
+ *cp++ = len >> 8;
+ *cp++ = len & 0xff;
+ fread( cp, 1, len, src_stream->file_handle );
+ cp += len;
+ }