[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/dump-stream-sync-info.c

shans nobody at lists.annodex.net
Fri Sep 1 06:27:25 UTC 2006


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

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/dump-stream-sync-info.c

Log Message:
Added audio data capture and statistics.  Fixed dump-stream-sync-info to use
number of samples available rather than number of packets.



Modified: liboggplay/trunk/include/oggplay/oggplay_callback_info.h
===================================================================
--- liboggplay/trunk/include/oggplay/oggplay_callback_info.h	2006-08-31 16:14:59 UTC (rev 2414)
+++ liboggplay/trunk/include/oggplay/oggplay_callback_info.h	2006-09-01 06:27:24 UTC (rev 2415)
@@ -67,6 +67,9 @@
 oggplay_callback_info_get_record(OggPlayCallbackInfo *info, int num, 
                                  int record);
 
+int
+oggplay_callback_info_get_record_size(OggPlayDataHeader *header);
+
 OggPlayVideoData *
 oggplay_callback_info_get_video_data(OggPlayDataHeader *header);
 

Modified: liboggplay/trunk/src/liboggplay/Version_script.in
===================================================================
--- liboggplay/trunk/src/liboggplay/Version_script.in	2006-08-31 16:14:59 UTC (rev 2414)
+++ liboggplay/trunk/src/liboggplay/Version_script.in	2006-09-01 06:27:24 UTC (rev 2415)
@@ -25,6 +25,7 @@
                 oggplay_callback_info_get_available_records;
                 oggplay_callback_info_get_required_records;
                 oggplay_callback_info_get_record;
+		oggplay_callback_info_get_record_size;
                 oggplay_callback_info_get_video_data;
         local:
                 *;

Modified: liboggplay/trunk/src/liboggplay/oggplay_callback.c
===================================================================
--- liboggplay/trunk/src/liboggplay/oggplay_callback.c	2006-08-31 16:14:59 UTC (rev 2414)
+++ liboggplay/trunk/src/liboggplay/oggplay_callback.c	2006-09-01 06:27:24 UTC (rev 2415)
@@ -149,8 +149,13 @@
 }
 
 int
-oggplay_fish_sound_callback(FishSound * fsound, short * pcm[], long frames,
-                                                        void *user_data) {
+oggplay_fish_sound_callback_shorts(FishSound * fsound, short * pcm[], 
+                                          long frames, void *user_data) {
+
+  OggPlayVorbisDecode *decoder = (OggPlayVorbisDecode *)user_data;
+
+  oggplay_data_handle_vorbis_data(&(decoder->decoder), pcm, frames, 
+              sizeof(short));
   return FISH_SOUND_CONTINUE;
 }
 
@@ -164,7 +169,8 @@
 
   fish_sound_set_interleave(decoder->sound_handle, 0);
   fish_sound_set_decoded_short(decoder->sound_handle, 
-                                      oggplay_fish_sound_callback, NULL);
+                                      oggplay_fish_sound_callback_shorts, 
+                                      (void *)decoder);
 
 } 
 int

Modified: liboggplay/trunk/src/liboggplay/oggplay_callback_info.c
===================================================================
--- liboggplay/trunk/src/liboggplay/oggplay_callback_info.c	2006-08-31 16:14:59 UTC (rev 2414)
+++ liboggplay/trunk/src/liboggplay/oggplay_callback_info.c	2006-09-01 06:27:24 UTC (rev 2415)
@@ -146,9 +146,26 @@
   return (info + track)->records[record];
 }
 
+int
+oggplay_callback_info_get_record_size(OggPlayDataHeader *header) {
+
+  if (header == NULL) {
+    return 0;
+  }
+
+  return header->samples_in_record;
+
+}
+
 OggPlayVideoData *
 oggplay_callback_info_get_video_data(OggPlayDataHeader *header) {
 
+  if (header == NULL) {
+    return NULL;
+  }
+
   return &((OggPlayVideoRecord *)header)->data;
 
 }
+
+

Modified: liboggplay/trunk/src/liboggplay/oggplay_data.c
===================================================================
--- liboggplay/trunk/src/liboggplay/oggplay_data.c	2006-08-31 16:14:59 UTC (rev 2414)
+++ liboggplay/trunk/src/liboggplay/oggplay_data.c	2006-09-01 06:27:24 UTC (rev 2415)
@@ -129,6 +129,20 @@
 }
 
 void
+oggplay_data_handle_vorbis_data (OggPlayDecode *decode, void *data, 
+      int samples, int samplesize) {
+
+  OggPlayAudioRecord * record = malloc(sizeof (OggPlayAudioRecord) + 
+                                  samples * samplesize);
+
+  oggplay_data_initialise_header(decode, &(record->header));
+  record->header.samples_in_record = samples;
+  record->data = data;
+  
+  oggplay_data_add_to_list(decode, &(record->header));
+}
+
+void
 oggplay_data_handle_theora_frame (OggPlayDecode *decode, yuv_buffer *buffer) {
 
   int                   size = sizeof (OggPlayVideoRecord);
@@ -153,6 +167,7 @@
    * trying not to pass negative output stride issues on to the poor user.
    */
   record = malloc (size);
+  record->header.samples_in_record = 1;
   data = &(record->data);
   oggplay_data_initialise_header(decode, &(record->header));
   data->y_width   = buffer->y_width;

Modified: liboggplay/trunk/src/liboggplay/oggplay_data.h
===================================================================
--- liboggplay/trunk/src/liboggplay/oggplay_data.h	2006-08-31 16:14:59 UTC (rev 2414)
+++ liboggplay/trunk/src/liboggplay/oggplay_data.h	2006-09-01 06:27:24 UTC (rev 2415)
@@ -45,6 +45,10 @@
 oggplay_data_handle_theora_frame (OggPlayDecode *decode, yuv_buffer *buffer);
 
 void
+oggplay_data_handle_vorbis_data (OggPlayDecode *decode, void *data, 
+      int samples, int samplesize);
+
+void
 oggplay_data_clean_list (OggPlayDecode *decode);
 
 #endif

Modified: liboggplay/trunk/src/liboggplay/oggplay_private.h
===================================================================
--- liboggplay/trunk/src/liboggplay/oggplay_private.h	2006-08-31 16:14:59 UTC (rev 2414)
+++ liboggplay/trunk/src/liboggplay/oggplay_private.h	2006-09-01 06:27:24 UTC (rev 2415)
@@ -56,6 +56,11 @@
   OggPlayVideoData    data;
 } OggPlayVideoRecord;
 
+typedef struct {
+  OggPlayDataHeader   header;
+  void              * data;
+} OggPlayAudioRecord;
+
 struct _OggPlay;
 
 struct _OggPlayCallbackInfo {

Modified: liboggplay/trunk/src/tests/dump-stream-sync-info.c
===================================================================
--- liboggplay/trunk/src/tests/dump-stream-sync-info.c	2006-08-31 16:14:59 UTC (rev 2414)
+++ liboggplay/trunk/src/tests/dump-stream-sync-info.c	2006-09-01 06:27:24 UTC (rev 2415)
@@ -39,12 +39,23 @@
   
   for (i = 0; i < num_records; i++)
   {
+
+    int j;
+
     available = oggplay_callback_info_get_available_records(info, i);
     required  = oggplay_callback_info_get_required_records(info, i);
     type      = oggplay_callback_info_get_type(info, i);
-    overrun   = available - required;
+
+    overrun = 0;
+
+    for (j = required; j < available; j++) {
+      OggPlayDataHeader *header;
+
+      header = oggplay_callback_info_get_record(info, i, j);
+      overrun += oggplay_callback_info_get_record_size(header);
+
+    }
     
-
     if (overrun > overruns[i].worst_overrun) {
       int j;
       overruns[i].histogram = realloc (overruns[i].histogram, 
@@ -109,16 +120,34 @@
  
   for (i = 0; i < oggplay_get_num_tracks (player); i++) {
     int j;
-    int mse = 0;
+    long long mse = 0;
     
     double average = (double)(overruns[i].overrun_sum)/n_frames;
-    
+    double hist_bucket_size = overruns[i].worst_overrun/20.0;
+    double cur_bucket;
+
     printf("track %d\n", i);
     printf("\tworst overrun: %d\n", overruns[i].worst_overrun);
     printf("\taverage overrun: %f\n", average);
+    printf("\thistogram bucket size: %f\n", hist_bucket_size);
     printf("\thistogram:");
+
+    for 
+    (
+      cur_bucket = 0; 
+      cur_bucket < overruns[i].worst_overrun; 
+      cur_bucket +=hist_bucket_size
+    ) {
+      int sum = 0;
+      //printf(" (%f-%f)", cur_bucket, cur_bucket + hist_bucket_size);
+      for (j = ceil(cur_bucket); j < cur_bucket + hist_bucket_size; j++) {
+        sum += overruns[i].histogram[j];
+      }
+      printf(" %d", sum);
+    }
+
     for (j = 0; j <= overruns[i].worst_overrun; j++) {
-      printf(" %d", overruns[i].histogram[j]);
+      //printf(" %d", overruns[i].histogram[j]);
       mse += (average - j) * (average - j) * overruns[i].histogram[j];
     }
     printf("\n");


-- 
shans



More information about the cvs-annodex mailing list