[Cvs-annodex] commit (annodex): liboggplay/trunk/include/oggplay/oggplay_callback_info.h liboggplay/trunk/src/liboggplay/Version_script.in 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_data.h liboggplay/trunk/src/liboggplay/oggplay_private.h liboggplay/trunk/src/tests/glut-player.c

shans nobody at lists.annodex.net
Tue Jan 2 04:39:01 UTC 2007


Update of /var/local/lib/svn/annodex (new revision 2594)

Modified files:
   liboggplay/trunk/include/oggplay/oggplay_callback_info.h
   liboggplay/trunk/src/liboggplay/Version_script.in
   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_data.h
   liboggplay/trunk/src/liboggplay/oggplay_private.h
   liboggplay/trunk/src/tests/glut-player.c

Log Message:
CMML support



Modified: liboggplay/trunk/include/oggplay/oggplay_callback_info.h
===================================================================
--- liboggplay/trunk/include/oggplay/oggplay_callback_info.h	2006-12-24 23:41:56 UTC (rev 2593)
+++ liboggplay/trunk/include/oggplay/oggplay_callback_info.h	2007-01-02 04:39:01 UTC (rev 2594)
@@ -47,6 +47,8 @@
 
 typedef void * OggPlayAudioData;
 
+typedef char OggPlayTextData;
+
 struct _OggPlayDataHeader;
 typedef struct _OggPlayDataHeader OggPlayDataHeader;
 
@@ -68,6 +70,9 @@
 OggPlayAudioData *
 oggplay_callback_info_get_audio_data(OggPlayDataHeader *header);
 
+OggPlayTextData *
+oggplay_callback_info_get_text_data(OggPlayDataHeader *header);
+
 void
 oggplay_callback_info_lock_item(OggPlayDataHeader *header);
 

Modified: liboggplay/trunk/src/liboggplay/Version_script.in
===================================================================
--- liboggplay/trunk/src/liboggplay/Version_script.in	2006-12-24 23:41:56 UTC (rev 2593)
+++ liboggplay/trunk/src/liboggplay/Version_script.in	2007-01-02 04:39:01 UTC (rev 2594)
@@ -35,6 +35,7 @@
 		            oggplay_callback_info_get_record_size;
                 oggplay_callback_info_get_video_data;
                 oggplay_callback_info_get_audio_data;
+                oggplay_callback_info_get_text_data;
 
                 oggplay_buffer_retrieve_next;
                 oggplay_buffer_release_next;

Modified: liboggplay/trunk/src/liboggplay/oggplay_callback.c
===================================================================
--- liboggplay/trunk/src/liboggplay/oggplay_callback.c	2006-12-24 23:41:56 UTC (rev 2593)
+++ liboggplay/trunk/src/liboggplay/oggplay_callback.c	2007-01-02 04:39:01 UTC (rev 2594)
@@ -40,6 +40,7 @@
 #include <stdlib.h>
 #include <sys/time.h>
 #include <time.h>
+#include <string.h>
 
 #define TIME_THEORA_DECODE 0
 
@@ -155,7 +156,42 @@
   
 }
 
+void
+oggplay_init_cmml (void * user_data) {
+
+  OggPlayCmmlDecode * decoder = (OggPlayCmmlDecode *)user_data;
+  decoder->decoder.decoded_type = OGGPLAY_CMML;
+  decoder->granuleshift = 32; /* default */
+}
+
 int
+oggplay_callback_cmml (OGGZ * oggz, ogg_packet * op, long serialno,
+                void * user_data) {
+
+  OggPlayCmmlDecode * decoder     = (OggPlayCmmlDecode *)user_data;
+  OggPlayDecode     * common      = &(decoder->decoder);
+  ogg_int64_t         granulepos  = oggz_tell_granulepos (oggz);
+
+  if (granulepos == 0) {
+    if (memcmp(op->packet, "CMML\0\0\0\0", 8) == 0) {
+      decoder->granuleshift = op->packet[28];
+    }
+  } else {
+
+    if (decoder->granuleshift > 0) {
+      granulepos >>= decoder->granuleshift;
+    }
+
+    common->current_loc = granulepos * common->granuleperiod;
+    
+    oggplay_data_handle_cmml_data (&(decoder->decoder), op->packet, op->bytes);
+  }
+  
+  return 0;
+  
+}
+
+int
 oggplay_fish_sound_callback_floats(FishSound * fsound, float ** pcm, 
                                           long frames, void *user_data) {
 
@@ -186,7 +222,8 @@
                                       (void *)decoder);
  
   decoder->decoder.decoded_type = OGGPLAY_FLOATS_AUDIO;
-} 
+}
+
 int
 oggplay_callback_vorbis (OGGZ * oggz, ogg_packet * op, long serialno, 
                 void * user_data) {
@@ -204,7 +241,7 @@
    */
   if (common->current_loc == -1) {
     if (granulepos > 0) {
-      common->current_loc = granulepos;
+      common->current_loc = granulepos * common->granuleperiod;
     }
   } else {
     common->current_loc += (granulepos - common->last_granulepos) * 
@@ -231,7 +268,7 @@
   {oggplay_init_vorbis, oggplay_callback_vorbis, sizeof(OggPlayVorbisDecode)},
   {NULL, NULL, sizeof(OggPlayDecode)}, /* SPEEX */
   {NULL, NULL, sizeof(OggPlayDecode)}, /* PCM */
-  {NULL, NULL, sizeof(OggPlayDecode)}, /* CMML */
+  {oggplay_init_cmml, oggplay_callback_cmml, sizeof(OggPlayCmmlDecode)}, 
   {NULL, NULL, sizeof(OggPlayDecode)}, /* ANX2 */
   {NULL, NULL, sizeof(OggPlayDecode)}, /* SKELETON */
   {NULL, NULL, sizeof(OggPlayDecode)}, /* FLAC0 */

Modified: liboggplay/trunk/src/liboggplay/oggplay_callback_info.c
===================================================================
--- liboggplay/trunk/src/liboggplay/oggplay_callback_info.c	2006-12-24 23:41:56 UTC (rev 2593)
+++ liboggplay/trunk/src/liboggplay/oggplay_callback_info.c	2007-01-02 04:39:01 UTC (rev 2594)
@@ -210,3 +210,14 @@
 
   return ((OggPlayAudioRecord *)header)->data;
 }
+
+OggPlayTextData *
+oggplay_callback_info_get_text_data(OggPlayDataHeader *header) {
+
+  if (header == NULL) {
+    return NULL;
+  }
+
+  return ((OggPlayTextRecord *)header)->data;
+
+}

Modified: liboggplay/trunk/src/liboggplay/oggplay_data.c
===================================================================
--- liboggplay/trunk/src/liboggplay/oggplay_data.c	2006-12-24 23:41:56 UTC (rev 2593)
+++ liboggplay/trunk/src/liboggplay/oggplay_data.c	2007-01-02 04:39:01 UTC (rev 2594)
@@ -163,6 +163,25 @@
 }
 
 void
+oggplay_data_handle_cmml_data(OggPlayDecode *decode, unsigned char *data, 
+                int size) {
+
+  OggPlayTextRecord * record;
+  
+  record = calloc (sizeof(OggPlayTextRecord) + size + 1, 1);
+  oggplay_data_initialise_header(decode, &(record->header));
+
+  record->header.samples_in_record = 1;
+  record->data = (void *)(record + 1);
+
+  memcpy(record->data, data, size);
+  record->data[size] = '\0';
+
+  oggplay_data_add_to_list(decode, &(record->header));
+  
+}
+
+void
 oggplay_data_handle_theora_frame (OggPlayTheoraDecode *decode, 
                                     yuv_buffer *buffer) {
 

Modified: liboggplay/trunk/src/liboggplay/oggplay_data.h
===================================================================
--- liboggplay/trunk/src/liboggplay/oggplay_data.h	2006-12-24 23:41:56 UTC (rev 2593)
+++ liboggplay/trunk/src/liboggplay/oggplay_data.h	2007-01-02 04:39:01 UTC (rev 2594)
@@ -50,6 +50,10 @@
                                  int samples, int samplesize);
 
 void
+oggplay_data_handle_cmml_data(OggPlayDecode *decode, unsigned char *data, 
+                                int size);
+
+void
 oggplay_data_clean_list (OggPlayDecode *decode);
 
 #endif

Modified: liboggplay/trunk/src/liboggplay/oggplay_private.h
===================================================================
--- liboggplay/trunk/src/liboggplay/oggplay_private.h	2006-12-24 23:41:56 UTC (rev 2593)
+++ liboggplay/trunk/src/liboggplay/oggplay_private.h	2007-01-02 04:39:01 UTC (rev 2594)
@@ -67,6 +67,11 @@
   void              * data;
 } OggPlayAudioRecord;
 
+typedef struct {
+  OggPlayDataHeader   header;
+  char              * data;
+} OggPlayTextRecord;
+
 struct _OggPlay;
 
 struct _OggPlayCallbackInfo {
@@ -114,6 +119,11 @@
 } OggPlayVorbisDecode;
 
 typedef struct {
+  OggPlayDecode   decoder;
+  int             granuleshift;
+} OggPlayCmmlDecode;
+
+typedef struct {
   void ** buffer_list;
   void ** buffer_mirror;
   int     buffer_size;

Modified: liboggplay/trunk/src/tests/glut-player.c
===================================================================
--- liboggplay/trunk/src/tests/glut-player.c	2006-12-24 23:41:56 UTC (rev 2593)
+++ liboggplay/trunk/src/tests/glut-player.c	2007-01-02 04:39:01 UTC (rev 2594)
@@ -154,7 +154,6 @@
 void init_audio() {
   unsigned int    rate;
   unsigned int    channels      = 2;
-  unsigned int    periods       = 4;
   int             tmp;
   
   rate = oggplay_get_audio_samplerate(player, audio_track);
@@ -251,6 +250,10 @@
             audio_data = oggplay_callback_info_get_audio_data(headers[j]);
             handle_audio_data(player, i, audio_data, size);
           }
+          break;
+        case OGGPLAY_CMML:
+          if (oggplay_callback_info_get_required(track_info[i]) > 0)
+            printf("%s\n", oggplay_callback_info_get_text_data(headers[0]));
         default:
           break;
       }


-- 
shans



More information about the cvs-annodex mailing list