[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