环境:mplayer,及它下面的stream
说明:1。本文只是阅读它的代码,没有进行调试跟踪,可能有出入不对的地方.
2。希望读者对dvd的逻辑结构有些了解,如vts, pgc, chapter, cell它们的关系.
dvd如何通过时间来定位的,可通过dvd_seek_to_time来分析,看看它是如何通过时间来定位的。也就是把时间转换成sector, DVDReadBlocks中的参数offset Block
它的定位就有点象物理学中的千分尺(游标卡尺),先通过时间查到所属dvd的cell,再在cell中找到时间偏移量,这时才确定dvd_read_sector所需要的cur_pack. <<DVDReadBlocks(d->title, d->cur_pack, 1, data)>>
static int dvd_seek_to_time(stream_t *stream, ifo_handle_t *vts_file, double sec)
{
unsigned int i, j, k, timeunit, ac_time, tmap_sector=0, cell_sector=0, vobu_sector=0;
int t=0;
double tm, duration;
off_t pos = -1;
dvd_priv_t *d = stream->priv;
vts_tmapt_t *vts_tmapt = vts_file->vts_tmapt;
if(!vts_file->vts_tmapt || sec < 0)
return 0;