[Cvs-annodex] commit (annodex):
liboggplay/trunk/include/oggplay/oggplay.h
liboggplay/trunk/src/liboggplay/Version_script.in
liboggplay/trunk/src/liboggplay/oggplay.c
liboggplay/trunk/src/liboggplay/oggplay_callback.c
liboggplay/trunk/src/liboggplay/oggplay_callback_info.c
liboggplay/trunk/src/liboggplay/oggplay_data.c
liboggplay/trunk/src/liboggplay/oggplay_private.h
liboggplay/trunk/src/tests/dump-stream-sync-info.c
liboggplay/trunk/src/tests/glut-player.c
shans
nobody at lists.annodex.net
Tue Dec 19 23:02:23 UTC 2006
Update of /var/local/lib/svn/annodex (new revision 2584)
Modified files:
liboggplay/trunk/include/oggplay/oggplay.h
liboggplay/trunk/src/liboggplay/Version_script.in
liboggplay/trunk/src/liboggplay/oggplay.c
liboggplay/trunk/src/liboggplay/oggplay_callback.c
liboggplay/trunk/src/liboggplay/oggplay_callback_info.c
liboggplay/trunk/src/liboggplay/oggplay_data.c
liboggplay/trunk/src/liboggplay/oggplay_private.h
liboggplay/trunk/src/tests/dump-stream-sync-info.c
liboggplay/trunk/src/tests/glut-player.c
Log Message:
Added oggplay_set_offset function to enable track decoding to be offset. Packets are still synchronised, but with the offset taken into account.
Modified: liboggplay/trunk/include/oggplay/oggplay.h
===================================================================
--- liboggplay/trunk/include/oggplay/oggplay.h 2006-12-18 21:08:05 UTC (rev 2583)
+++ liboggplay/trunk/include/oggplay/oggplay.h 2006-12-19 23:02:22 UTC (rev 2584)
@@ -70,6 +70,8 @@
OggPlayErrorCode
oggplay_set_callback_num_frames(OggPlay *me, int stream, int frames);
+OggPlayErrorCode
+oggplay_set_offset(OggPlay *me, int track, ogg_int64_t offset);
OggPlayErrorCode
oggplay_get_yuv_information(OggPlay *me, int track, int *y_width,
Modified: liboggplay/trunk/src/liboggplay/Version_script.in
===================================================================
--- liboggplay/trunk/src/liboggplay/Version_script.in 2006-12-18 21:08:05 UTC (rev 2583)
+++ liboggplay/trunk/src/liboggplay/Version_script.in 2006-12-19 23:02:22 UTC (rev 2584)
@@ -22,6 +22,7 @@
oggplay_set_track_active;
+ oggplay_set_offset;
oggplay_get_video_y_size;
oggplay_get_video_uv_size;
oggplay_get_audio_channels;
Modified: liboggplay/trunk/src/liboggplay/oggplay.c
===================================================================
--- liboggplay/trunk/src/liboggplay/oggplay.c 2006-12-18 21:08:05 UTC (rev 2583)
+++ liboggplay/trunk/src/liboggplay/oggplay.c 2006-12-19 23:02:22 UTC (rev 2584)
@@ -147,6 +147,23 @@
}
OggPlayErrorCode
+oggplay_set_offset(OggPlay *me, int track, ogg_int64_t offset) {
+
+ if (me == NULL) {
+ return E_OGGPLAY_BAD_OGGPLAY;
+ }
+
+ if (track <= 0 || track > me->num_tracks) {
+ return E_OGGPLAY_BAD_TRACK;
+ }
+
+ me->decode_data[track]->offset = (offset << 32);
+
+ return E_OGGPLAY_OK;
+
+}
+
+OggPlayErrorCode
oggplay_get_video_y_size(OggPlay *me, int track, int *y_width, int *y_height) {
OggPlayTheoraDecode *decode;
@@ -316,12 +333,23 @@
return E_OGGPLAY_OK;
}
+ /*
+ * if any of the tracks have not yet met the target (modified by that
+ * track's offset), then return E_OGGPLAY_CONTINUE to retrieve more
+ * data
+ */
for (i = 0; i < me->num_tracks; i++) {
if (me->decode_data[i]->active == 0)
continue;
if (me->decode_data[i]->content_type == OGGZ_CONTENT_CMML)
continue;
- if (me->decode_data[i]->current_loc < me->target) {
+ if
+ (
+ me->decode_data[i]->current_loc
+ <
+ me->target + me->decode_data[i]->offset
+ )
+ {
return E_OGGPLAY_CONTINUE;
}
}
Modified: liboggplay/trunk/src/liboggplay/oggplay_callback.c
===================================================================
--- liboggplay/trunk/src/liboggplay/oggplay_callback.c 2006-12-18 21:08:05 UTC (rev 2583)
+++ liboggplay/trunk/src/liboggplay/oggplay_callback.c 2006-12-19 23:02:22 UTC (rev 2584)
@@ -262,6 +262,13 @@
*/
decoder->current_loc = -1;
decoder->last_granulepos = 0;
+
+ /*
+ * the offset is how far advanced or delayed this track is to the "standard"
+ * time position. An offset of 1000, for example, indicates that data for
+ * this track arrives 1 second in advance of data for other tracks
+ */
+ decoder->offset = 0;
oggz_get_granulerate(me->oggz, serialno, &num, &denom);
Modified: liboggplay/trunk/src/liboggplay/oggplay_callback_info.c
===================================================================
--- liboggplay/trunk/src/liboggplay/oggplay_callback_info.c 2006-12-18 21:08:05 UTC (rev 2583)
+++ liboggplay/trunk/src/liboggplay/oggplay_callback_info.c 2006-12-19 23:02:22 UTC (rev 2584)
@@ -85,7 +85,7 @@
count = 0;
for (p = q; p != NULL; p = p->next) {
track_info->records[count++] = p;
- if (p->presentation_time <= me->target) {
+ if (p->presentation_time <= me->target + track->offset) {
track_info->required_records++;
}
}
Modified: liboggplay/trunk/src/liboggplay/oggplay_data.c
===================================================================
--- liboggplay/trunk/src/liboggplay/oggplay_data.c 2006-12-18 21:08:05 UTC (rev 2583)
+++ liboggplay/trunk/src/liboggplay/oggplay_data.c 2006-12-19 23:02:22 UTC (rev 2584)
@@ -92,7 +92,13 @@
OggPlayDataHeader * p = NULL;
while (header != NULL) {
- if (header->presentation_time < target && header->lock == 1) {
+ if
+ (
+ header->presentation_time < (target + decode->offset)
+ &&
+ header->lock == 1
+ )
+ {
header->lock = 0;
}
if (header->lock <= 0) {
Modified: liboggplay/trunk/src/liboggplay/oggplay_private.h
===================================================================
--- liboggplay/trunk/src/liboggplay/oggplay_private.h 2006-12-18 21:08:05 UTC (rev 2583)
+++ liboggplay/trunk/src/liboggplay/oggplay_private.h 2006-12-19 23:02:22 UTC (rev 2584)
@@ -77,6 +77,7 @@
OggPlayDataType decoded_type;
ogg_int64_t granuleperiod;
ogg_int64_t last_granulepos;
+ ogg_int64_t offset;
ogg_int64_t current_loc;
int active;
ogg_int64_t final_granulepos;
Modified: liboggplay/trunk/src/tests/dump-stream-sync-info.c
===================================================================
--- liboggplay/trunk/src/tests/dump-stream-sync-info.c 2006-12-18 21:08:05 UTC (rev 2583)
+++ liboggplay/trunk/src/tests/dump-stream-sync-info.c 2006-12-19 23:02:22 UTC (rev 2584)
@@ -106,6 +106,11 @@
if (oggplay_get_track_type (player, i) == OGGZ_CONTENT_THEORA) {
oggplay_set_callback_num_frames (player, i, 1);
}
+ /*
+ if (oggplay_get_track_type (player, i) == OGGZ_CONTENT_VORBIS) {
+ oggplay_set_offset(player, i, 1000LL);
+ }
+ */
if (oggplay_set_track_active(player, i) < 0) {
printf("\tNote: Could not set this track active!\n");
Modified: liboggplay/trunk/src/tests/glut-player.c
===================================================================
--- liboggplay/trunk/src/tests/glut-player.c 2006-12-18 21:08:05 UTC (rev 2583)
+++ liboggplay/trunk/src/tests/glut-player.c 2006-12-19 23:02:22 UTC (rev 2584)
@@ -405,6 +405,7 @@
}
else if (oggplay_get_track_type (player, i) == OGGZ_CONTENT_VORBIS) {
audio_track = i;
+ //oggplay_set_offset(player, i, 1000L);
}
if (oggplay_set_track_active(player, i) < 0) {
--
shans
More information about the cvs-annodex
mailing list