comparison searching.c @ 132:f22458f928b8 src

PGC based positioning
author mroi
date Sun, 23 Mar 2003 15:24:31 +0000
parents ada79e606d8d
children d09a81cf65ce
comparison
equal deleted inserted replaced
131:ada79e606d8d 132:f22458f928b8
166 printerr("Illegal seek mode."); 166 printerr("Illegal seek mode.");
167 pthread_mutex_unlock(&this->vm_lock); 167 pthread_mutex_unlock(&this->vm_lock);
168 return S_ERR; 168 return S_ERR;
169 } 169 }
170 170
171 /* First find closest cell number in program */ 171 if (this->pgc_based) {
172 first_cell_nr = state->pgc->program_map[state->pgN-1]; 172 first_cell_nr = 1;
173 if(state->pgN < state->pgc->nr_of_programs) { 173 last_cell_nr = state->pgc->nr_of_cells;
174 last_cell_nr = state->pgc->program_map[state->pgN] - 1;
175 } else { 174 } else {
176 last_cell_nr = state->pgc->nr_of_cells; 175 /* Find start cell of program. */
177 } 176 first_cell_nr = state->pgc->program_map[state->pgN-1];
178 177 /* Find end cell of program */
178 if(state->pgN < state->pgc->nr_of_programs)
179 last_cell_nr = state->pgc->program_map[state->pgN] - 1;
180 else
181 last_cell_nr = state->pgc->nr_of_cells;
182 }
183
179 found = 0; 184 found = 0;
180 for(cell_nr = first_cell_nr; (cell_nr <= last_cell_nr) && !found; cell_nr ++) { 185 for(cell_nr = first_cell_nr; (cell_nr <= last_cell_nr) && !found; cell_nr ++) {
181 cell = &(state->pgc->cell_playback[cell_nr-1]); 186 cell = &(state->pgc->cell_playback[cell_nr-1]);
182 length = cell->last_sector - cell->first_sector + 1; 187 length = cell->last_sector - cell->first_sector + 1;
183 if (target >= length) { 188 if (target >= length) {
380 uint32_t cur_sector; 385 uint32_t cur_sector;
381 uint32_t cell_nr; 386 uint32_t cell_nr;
382 uint32_t first_cell_nr; 387 uint32_t first_cell_nr;
383 uint32_t last_cell_nr; 388 uint32_t last_cell_nr;
384 cell_playback_t *cell; 389 cell_playback_t *cell;
385 cell_playback_t *first_cell;
386 cell_playback_t *last_cell;
387 dvd_state_t *state; 390 dvd_state_t *state;
388 391
389 if(!this || !pos || !len) { 392 if(!this || !pos || !len) {
390 printerr("Passed a NULL pointer."); 393 printerr("Passed a NULL pointer.");
391 return S_ERR; 394 return S_ERR;
404 } 407 }
405 408
406 /* Get current sector */ 409 /* Get current sector */
407 cur_sector = this->vobu.vobu_start + this->vobu.blockN; 410 cur_sector = this->vobu.vobu_start + this->vobu.blockN;
408 411
409 /* Find start cell of program. */ 412 if (this->pgc_based) {
410 first_cell_nr = state->pgc->program_map[state->pgN-1]; 413 first_cell_nr = 1;
411 first_cell = &(state->pgc->cell_playback[first_cell_nr-1]); 414 last_cell_nr = state->pgc->nr_of_cells;
412
413 /* Find end cell of program */
414 if(state->pgN < state->pgc->nr_of_programs) {
415 last_cell_nr = state->pgc->program_map[state->pgN] - 1;
416 } else { 415 } else {
417 last_cell_nr = state->pgc->nr_of_cells; 416 /* Find start cell of program. */
418 } 417 first_cell_nr = state->pgc->program_map[state->pgN-1];
419 last_cell = &(state->pgc->cell_playback[last_cell_nr-1]); 418 /* Find end cell of program */
420 419 if(state->pgN < state->pgc->nr_of_programs)
420 last_cell_nr = state->pgc->program_map[state->pgN] - 1;
421 else
422 last_cell_nr = state->pgc->nr_of_cells;
423 }
424
421 *pos = -1; 425 *pos = -1;
422 *len = 0; 426 *len = 0;
423 for (cell_nr = first_cell_nr; cell_nr <= last_cell_nr; cell_nr++) { 427 for (cell_nr = first_cell_nr; cell_nr <= last_cell_nr; cell_nr++) {
424 cell = &(state->pgc->cell_playback[cell_nr-1]); 428 cell = &(state->pgc->cell_playback[cell_nr-1]);
425 if (cell_nr == state->cellN) { 429 if (cell_nr == state->cellN) {