[cvs-annodex] commit (/annodex):
liboggz/trunk/src/liboggz/oggz_seek.c
liboggz/trunk/src/tests/seek-stress.c
conrad
nobody at lists.annodex.net
Fri Feb 11 03:50:17 EST 2005
Update of /annodex (new revision 873)
Modified files:
liboggz/trunk/src/liboggz/oggz_seek.c
liboggz/trunk/src/tests/seek-stress.c
Log Message:
improvements for keyframe seeking
Modified: liboggz/trunk/src/liboggz/oggz_seek.c
===================================================================
--- liboggz/trunk/src/liboggz/oggz_seek.c 2005-02-10 16:49:08 UTC (rev 872)
+++ liboggz/trunk/src/liboggz/oggz_seek.c 2005-02-10 16:50:03 UTC (rev 873)
@@ -252,12 +252,12 @@
/* Calculate the byte offset of the page which was found */
if (bytes > 0) {
oggz->offset = oggz_tell_raw (oggz) - bytes + page_offset;
- ret = oggz->offset;
} else {
/* didn't need to do any reading -- accumulate the page_offset */
- ret = oggz->offset + page_offset;
- oggz->offset += page_offset + more;
+ oggz->offset += page_offset;
}
+
+ ret = oggz->offset + more;
return ret;
}
@@ -292,9 +292,9 @@
ogg_int64_t * granule, long * serialno)
{
oggz_off_t offset_at, offset_start;
- oggz_off_t page_offset, prev_offset = 0;
+ oggz_off_t page_offset, found_offset = 0;
ogg_int64_t unit_at;
- long granule_at = -1;
+ ogg_int64_t granule_at = -1;
#if 0
offset_at = oggz_tell_raw (oggz);
@@ -307,7 +307,7 @@
do {
- offset_start = offset_at - CHUNKSIZE;
+ offset_start = offset_start - CHUNKSIZE;
if (offset_start < 0) offset_start = 0;
offset_start = oggz_seek_raw (oggz, offset_start, SEEK_SET);
@@ -324,10 +324,13 @@
page_offset = 0;
do {
- prev_offset = page_offset;
-
page_offset = oggz_get_next_start_page (oggz, og);
- if (page_offset == -1) return -1;
+ if (page_offset == -1) {
+#ifdef DEBUG
+ printf ("get_prev_start_page: page_offset = -1\n");
+#endif
+ return -1;
+ }
if (page_offset == -2) {
#ifdef DEBUG
printf ("*** get_prev_start_page: page_offset = -2\n");
@@ -335,10 +338,10 @@
break;
}
- granule_at = (long)ogg_page_granulepos (og);
+ granule_at = ogg_page_granulepos (og);
#ifdef DEBUG_VERBOSE
- printf ("get_prev_start_page: GOT page (%ld) @%ld\tat @%ld\n",
+ printf ("get_prev_start_page: GOT page (%lld) @%ld\tat @%ld\n",
granule_at, page_offset, offset_at);
#endif
@@ -346,6 +349,7 @@
* will be overwritten by the time we realise this was the desired
* prev page */
if (page_offset >= 0 && page_offset < offset_at) {
+ found_offset = page_offset;
*granule = granule_at;
*serialno = ogg_page_serialno (og);
}
@@ -354,27 +358,27 @@
#ifdef DEBUG
printf ("get_prev_start_page: [B] offset_at: @%ld\toffset_start: @%ld\n"
- "prev_offset: @%ld\tpage_offset: @%ld\n",
- offset_at, offset_start, prev_offset, page_offset);
+ "found_offset: @%ld\tpage_offset: @%ld\n",
+ offset_at, offset_start, found_offset, page_offset);
#endif
/* reset the file offset */
- offset_at = offset_start;
+ /*offset_at = offset_start;*/
- } while (offset_at > 0 && prev_offset == 0);
+ } while (found_offset == 0 && offset_start > 0);
unit_at = oggz_get_unit (oggz, *serialno, *granule);
- offset_at = oggz_reset (oggz, prev_offset, unit_at, SEEK_SET);
+ offset_at = oggz_reset (oggz, found_offset, unit_at, SEEK_SET);
#ifdef DEBUG
printf ("get_prev_start_page: [C] offset_at: @%ld\t"
- "prev_offset: @%ld\tunit_at: %lld\n",
- offset_at, prev_offset, unit_at);
+ "found_offset: @%ld\tunit_at: %lld\n",
+ offset_at, found_offset, unit_at);
#endif
if (offset_at == -1) return -1;
if (offset_at >= 0)
- return prev_offset;
+ return found_offset;
else
return -1;
}
@@ -736,13 +740,22 @@
}
found:
+ offset_at = oggz_get_prev_start_page (oggz, og, &granule_at, &serialno);
+
+ unit_at = oggz_get_unit (oggz, serialno, granule_at);
+
+ if (offset_at < 0) {
+ oggz_reset (oggz, offset_orig, -1, SEEK_SET);
+ return -1;
+ }
+
+ offset_at = oggz_reset (oggz, offset_at, unit_at, SEEK_SET);
+ if (offset_at == -1) return -1;
+
#ifdef DEBUG
printf ("oggz_seek_set: FOUND (%lld)\n", unit_at);
#endif
- offset_at = oggz_reset (oggz, offset_at, unit_at, SEEK_SET);
- if (offset_at == -1) return -1;
-
return (long)reader->current_unit;
notfound:
@@ -781,7 +794,7 @@
}
#ifdef DEBUG
- printf ("*** oggz_seek_end: found packet (%ld) at @%ld [%ld]\n",
+ printf ("*** oggz_seek_end: found packet (%lld) at @%ld [%lld]\n",
unit_end, offset_end, granulepos);
#endif
Modified: liboggz/trunk/src/tests/seek-stress.c
===================================================================
--- liboggz/trunk/src/tests/seek-stress.c 2005-02-10 16:49:08 UTC (rev 872)
+++ liboggz/trunk/src/tests/seek-stress.c 2005-02-10 16:50:03 UTC (rev 873)
@@ -70,7 +70,7 @@
diff = result - units;
if (verbose)
- printf ("\t%08lx: %lld ms (+%lld ms)\n",
+ printf ("\t%08lx: %lld ms (%+lld ms)\n",
oggz_tell (oggz), oggz_tell_units (oggz), diff);
if (result < 0) {
@@ -83,8 +83,8 @@
if (units == 0 && result != 0)
FAIL ("Failed seeking to 0");
- if (diff < 0)
- FAIL ("Seek result too early");
+ if (diff > 0)
+ WARN ("Seek result too late");
return units;
}
--
conrad
More information about the cvs-annodex
mailing list