[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