# HG changeset patch # User nicodvb # Date 1174732625 0 # Node ID f6dc5fd2b3476748a7edd1ae7367bb709ea3a406 # Parent 92e4f4b5828f1bc27053da93472ead1d6e552755 at open() discard front margin/empty sectors (fixes demuxing by libavformat); patch by Zuxy meng diff -r 92e4f4b5828f -r f6dc5fd2b347 stream/stream_vcd.c --- a/stream/stream_vcd.c Sat Mar 24 09:46:12 2007 +0000 +++ b/stream/stream_vcd.c Sat Mar 24 10:37:05 2007 +0000 @@ -79,7 +79,7 @@ static int open_s(stream_t *stream,int mode, void* opts, int* file_format) { struct stream_priv_s* p = (struct stream_priv_s*)opts; - int ret,ret2,f; + int ret,ret2,f,sect,tmp; mp_vcd_priv_t* vcd; #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) int bsize = VCD_SECTOR_SIZE; @@ -143,6 +143,18 @@ m_struct_free(&stream_opts,opts); return STREAM_ERROR; } + /* search forward up to at most 3 seconds to skip leading margin */ + sect = ret / VCD_SECTOR_DATA; + for (tmp = sect; tmp < sect + 3 * 75; tmp++) { + char mem[VCD_SECTOR_DATA]; + //since MPEG packs are block-aligned we stop discarding sectors if they are non-null + if (vcd_read(vcd, mem) != VCD_SECTOR_DATA || mem[2] || mem[3]) + break; + } + mp_msg(MSGT_OPEN, MSGL_DBG2, "%d leading sectors skipped\n", tmp - sect); + vcd_set_msf(vcd, tmp); + ret = tmp * VCD_SECTOR_DATA; + mp_msg(MSGT_OPEN,MSGL_V,"VCD start byte position: 0x%X end: 0x%X\n",ret,ret2); #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)