# HG changeset patch # User diego # Date 1280703075 0 # Node ID ab9824b6acc7bb9c549f904385de350b3999b8c3 # Parent 61517b367d31ae09b7fdca149fe74193479898d0 dvd: Improve seeking by chapters. The current code seeks to the start of the chapter. From this position, it then tries to figure out the starting cell. This is completely suboptimal and error prone since the starting cell can be directly deduced from the chapter. patch by Olivier Rolland, billl users.sourceforge net diff -r 61517b367d31 -r ab9824b6acc7 stream/stream_dvd.c --- a/stream/stream_dvd.c Sun Aug 01 22:48:01 2010 +0000 +++ b/stream/stream_dvd.c Sun Aug 01 22:51:15 2010 +0000 @@ -507,7 +507,7 @@ static int seek_to_chapter(stream_t *stream, ifo_handle_t *vts_file, tt_srpt_t *tt_srpt, int title_no, int chapter) { - int cell; + dvd_priv_t *d = stream->priv; ptt_info_t ptt; pgc_t *pgc; off_t pos; @@ -530,11 +530,18 @@ ptt = vts_file->vts_ptt_srpt->title[title_no].ptt[chapter]; pgc = vts_file->vts_pgcit->pgci_srp[ptt.pgcn-1].pgc; - cell = pgc->program_map[ptt.pgn - 1] - 1; - pos = (off_t) pgc->cell_playback[cell].first_sector * 2048; + d->cur_cell = pgc->program_map[ptt.pgn - 1] - 1; + if(pgc->cell_playback[d->cur_cell].block_type == BLOCK_TYPE_ANGLE_BLOCK) + d->cur_cell += dvd_angle; + d->cur_pack = pgc->cell_playback[d->cur_cell].first_sector; + d->cell_last_pack = pgc->cell_playback[d->cur_cell].last_sector; + + d->packs_left = -1; + d->angle_seek = 0; + + pos = (off_t) d->cur_pack * 2048; mp_msg(MSGT_OPEN,MSGL_V,"\r\nSTREAM_DVD, seeked to chapter: %d, cell: %u, pos: %"PRIu64"\n", - chapter, pgc->cell_playback[cell].first_sector, pos); - stream_seek(stream, pos); + chapter, d->cur_pack, pos); return chapter; }