diff --git a/media/liboggplay/README_MOZILLA b/media/liboggplay/README_MOZILLA index 0be1f446fa2..42c67f3d305 100644 --- a/media/liboggplay/README_MOZILLA +++ b/media/liboggplay/README_MOZILLA @@ -13,8 +13,5 @@ to disable optimized yuv to rgb routines. The patch from Bug 452698 (yuv2argb.patch) is applied to fix yuv to rgb conversion on PPC Mac OS X. -Apply patch from bug 468281 to get liboggplay svn r3863 changeset. -The patch for this is in bug468281_r3863.patch. - -Apply patch from bug 468281 to get liboggplay svn r3864 changeset. -The patch for this is in bug468281_r3864.patch. +The patch from Bug 464007 (bug464007.patch) is applied +to fix oggplay issues. diff --git a/media/liboggplay/bug464007.patch b/media/liboggplay/bug464007.patch new file mode 100644 index 00000000000..8cfe5b1a82f --- /dev/null +++ b/media/liboggplay/bug464007.patch @@ -0,0 +1,18 @@ +diff --git a/media/liboggplay/src/liboggplay/oggplay.c b/media/liboggplay/src/liboggplay/oggplay.c +index 9a1c8b8..250064d 100644 +--- a/media/liboggplay/src/liboggplay/oggplay.c ++++ b/media/liboggplay/src/liboggplay/oggplay.c +@@ -522,9 +522,11 @@ read_more_data: + } + + /* +- * ensure all tracks have their final data packet set to end_of_stream ++ * ensure all tracks have their final data packet set to end_of_stream. ++ * But skip doing this if we're shutting down --- me->buffer may not ++ * be in a safe state. + */ +- if (me->buffer != NULL) { ++ if (me->buffer != NULL && !me->shutdown) { + oggplay_buffer_set_last_data(me, me->buffer); + } + diff --git a/media/liboggplay/bug468281_r3863.patch b/media/liboggplay/bug468281_r3863.patch deleted file mode 100644 index 566766d8b79..00000000000 --- a/media/liboggplay/bug468281_r3863.patch +++ /dev/null @@ -1,975 +0,0 @@ -diff --git a/include/oggplay/oggplay.h b/include/oggplay/oggplay.h -index 019958a..cdcb168 100644 ---- a/include/oggplay/oggplay.h -+++ b/include/oggplay/oggplay.h -@@ -56,20 +56,27 @@ typedef int (OggPlayDataCallback)(OggPlay *player, int num_records, - #include - #include - #include --/* --#include --#include --*/ -- --OggPlay * --oggplay_init(void); -- --OggPlayErrorCode --oggplay_set_reader(OggPlay *OS, OggPlayReader *OSR); - -+/** -+ * Create an OggPlay handle associated with the given reader. -+ * The functions creates a new OggPlay handle and associates with -+ * the given OggPlayReader and initialises the buffer. -+ * -+ * -+ * @param reader an OggPlayReader handle associated with the Ogg content -+ * @return A new OggPlay handle -+ * @retval NULL in case of error. -+ */ - OggPlay * - oggplay_open_with_reader(OggPlayReader *reader); - -+/** -+ * Create a new OggPlay handle associated with the given reader. -+ * -+ * \param reader OggPlayReader handle associated with the Ogg content -+ * \return A new OggPlay handle -+ * \retval NULL in case of error. -+ */ - OggPlay * - oggplay_new_with_reader(OggPlayReader *reader); - -@@ -128,6 +135,13 @@ oggplay_buffer_release(OggPlay *player, OggPlayCallbackInfo **track_info); - void - oggplay_prepare_for_close(OggPlay *me); - -+/** -+ * @brief Destroys the OggPlay handle along with the associated OggPlayReader -+ * and clears out the buffer and shuts down the callback function. -+ * -+ * @param player an OggPlay handle -+ * @retval E_OGGPLAY_OK on success -+ */ - OggPlayErrorCode - oggplay_close(OggPlay *player); - -diff --git a/include/oggplay/oggplay_enums.h b/include/oggplay/oggplay_enums.h -index cda068f..6f4790f 100644 ---- a/include/oggplay/oggplay_enums.h -+++ b/include/oggplay/oggplay_enums.h -@@ -62,6 +62,7 @@ typedef enum OggPlayErrorCode { - E_OGGPLAY_TIMEOUT = -17, - E_OGGPLAY_CANT_SEEK = -18, - E_OGGPLAY_NO_KATE_SUPPORT = -19, -+ E_OGGPLAY_OUT_OF_MEMORY = -20, - E_OGGPLAY_NOTCHICKENPAYBACK = -777 - } OggPlayErrorCode; - -diff --git a/include/oggplay/oggplay_reader.h b/include/oggplay/oggplay_reader.h -index 992f416..21b5206 100644 ---- a/include/oggplay/oggplay_reader.h -+++ b/include/oggplay/oggplay_reader.h -@@ -63,9 +63,25 @@ typedef struct _OggPlayReader { - long (*io_tell)(void *user_handle); - } OggPlayReader; - -+/** -+ * Create and initialise an OggPlayReader for a given Ogg file. -+ * -+ * @param filename The file to open -+ * @return A new OggPlayReader handle -+ * @retval NULL on error. -+ */ - OggPlayReader * - oggplay_file_reader_new(char *filename); - -+/** -+ * Create and initialise an OggPlayReader for an Ogg content at a given URI. -+ * -+ * @param uri The URI to the Ogg file. -+ * @param proxy Proxy -+ * @param proxy_port Proxy port. -+ * @return A new OggPlayReader handle -+ * @retval NULL on error. -+ */ - OggPlayReader * - oggplay_tcp_reader_new(char *uri, char *proxy, int proxy_port); - -diff --git a/src/liboggplay/oggplay.c b/src/liboggplay/oggplay.c -index c71d639..8fa3b9e 100644 ---- a/src/liboggplay/oggplay.c -+++ b/src/liboggplay/oggplay.c -@@ -48,7 +48,15 @@ - OggPlay * - oggplay_new_with_reader(OggPlayReader *reader) { - -- OggPlay * me = (OggPlay *)malloc(sizeof(OggPlay)); -+ OggPlay * me = NULL; -+ -+ /* check whether the reader is valid. */ -+ if (reader == NULL) -+ return NULL; -+ -+ me = (OggPlay *)oggplay_malloc (sizeof(OggPlay)); -+ if (me == NULL) -+ return NULL; - - me->reader = reader; - me->decode_data = NULL; -@@ -94,10 +102,20 @@ oggplay_initialise(OggPlay *me, int block) { - * the main loop - */ - me->oggz = oggz_new(OGGZ_READ | OGGZ_AUTO); -- oggz_io_set_read(me->oggz, me->reader->io_read, me->reader); -- oggz_io_set_seek(me->oggz, me->reader->io_seek, me->reader); -- oggz_io_set_tell(me->oggz, me->reader->io_tell, me->reader); -- oggz_set_read_callback(me->oggz, -1, oggplay_callback_predetected, me); -+ if (me->oggz == NULL) -+ return E_OGGPLAY_OGGZ_UNHAPPY; -+ -+ if (oggz_io_set_read(me->oggz, me->reader->io_read, me->reader) != 0) -+ return E_OGGPLAY_OGGZ_UNHAPPY; -+ -+ if (oggz_io_set_seek(me->oggz, me->reader->io_seek, me->reader) != 0) -+ return E_OGGPLAY_OGGZ_UNHAPPY; -+ -+ if (oggz_io_set_tell(me->oggz, me->reader->io_tell, me->reader) != 0) -+ return E_OGGPLAY_OGGZ_UNHAPPY; -+ -+ if (oggz_set_read_callback(me->oggz, -1, oggplay_callback_predetected, me)) -+ return E_OGGPLAY_OGGZ_UNHAPPY; - - while (1) { - -@@ -131,15 +149,20 @@ oggplay_initialise(OggPlay *me, int block) { - OggPlay * - oggplay_open_with_reader(OggPlayReader *reader) { - -- OggPlay *me = oggplay_new_with_reader(reader); -- -+ OggPlay *me = NULL; - int r = E_OGGPLAY_TIMEOUT; -+ -+ if ( (me = oggplay_new_with_reader(reader)) == NULL) -+ return NULL; -+ - while (r == E_OGGPLAY_TIMEOUT) { - r = oggplay_initialise(me, 0); - } - - if (r != E_OGGPLAY_OK) { -- free(me); -+ /* in case of error close the OggPlay handle */ -+ oggplay_close(me); -+ - return NULL; - } - -@@ -195,6 +218,7 @@ oggplay_set_callback_num_frames(OggPlay *me, int track, int frames) { - me->callback_period = me->decode_data[track]->granuleperiod * frames; - me->target = me->presentation_time + me->callback_period - 1; - -+// printf("targ: %lld, callback_per: %lld, prestime: %lld\n", me->target, me->callback_period,me->presentation_time ); - - return E_OGGPLAY_OK; - -@@ -524,8 +548,10 @@ read_more_data: - - /* - * ensure all tracks have their final data packet set to end_of_stream -+ * But skip doing this if we're shutting down --- me->buffer may not -+ * be in a safe state. - */ -- if (me->buffer != NULL) { -+ if (me->buffer != NULL && !me->shutdown) { - oggplay_buffer_set_last_data(me, me->buffer); - } - -@@ -594,17 +620,21 @@ oggplay_close(OggPlay *me) { - me->reader->destroy(me->reader); - } - -- for (i = 0; i < me->num_tracks; i++) { -- oggplay_callback_shutdown(me->decode_data[i]); -+ -+ if (me->decode_data) { -+ for (i = 0; i < me->num_tracks; i++) { -+ oggplay_callback_shutdown(me->decode_data[i]); -+ } - } - -- oggz_close(me->oggz); -+ if (me->oggz) -+ oggz_close(me->oggz); - - if (me->buffer != NULL) { - oggplay_buffer_shutdown(me, me->buffer); - } - -- free(me); -+ oggplay_free(me); - - return E_OGGPLAY_OK; - } -@@ -685,3 +715,4 @@ oggplay_media_finished_retrieving(OggPlay *me) { - return me->reader->finished_retrieving(me->reader); - - } -+ -diff --git a/src/liboggplay/oggplay_buffer.c b/src/liboggplay/oggplay_buffer.c -index e752f33..b116c7f 100644 ---- a/src/liboggplay/oggplay_buffer.c -+++ b/src/liboggplay/oggplay_buffer.c -@@ -53,26 +53,43 @@ - OggPlayBuffer * - oggplay_buffer_new_buffer(int size) { - -- OggPlayBuffer *buffer = 0; -+ OggPlayBuffer *buffer = NULL; - if (size < 0) { - size = OGGPLAY_DEFAULT_BUFFER_SIZE; - } - -- buffer = (OggPlayBuffer*)malloc(sizeof (OggPlayBuffer)); -+ buffer = (OggPlayBuffer*)oggplay_malloc(sizeof (OggPlayBuffer)); - -- buffer->buffer_list = malloc(sizeof (void *) * size); -- memset(buffer->buffer_list, 0, sizeof (void *) * size); -- buffer->buffer_mirror = malloc(sizeof (void *) * size); -- memset(buffer->buffer_mirror, 0, sizeof (void *) * size); -+ if (buffer == NULL) -+ return NULL; -+ -+ buffer->buffer_list = oggplay_calloc(size, sizeof (void *)); -+ if (buffer->buffer_list == NULL) -+ goto error; -+ -+ buffer->buffer_mirror = oggplay_calloc(size, sizeof (void *)); -+ if (buffer->buffer_mirror == NULL) -+ goto error; - - buffer->buffer_size = size; - buffer->last_filled = -1; - buffer->last_emptied = -1; - -- SEM_CREATE(buffer->frame_sem, size); -+ if (SEM_CREATE(buffer->frame_sem, size) != 0) -+ goto error; - - return buffer; - -+error: -+ if (buffer->buffer_list != NULL) -+ oggplay_free (buffer->buffer_list); -+ -+ if (buffer->buffer_mirror != NULL) -+ oggplay_free (buffer->buffer_mirror); -+ -+ oggplay_free (buffer); -+ -+ return NULL; - } - - void -@@ -87,16 +104,16 @@ oggplay_buffer_shutdown(OggPlay *me, volatile OggPlayBuffer *vbuffer) { - if (buffer->buffer_mirror[i] != NULL) { - OggPlayCallbackInfo *ti = (OggPlayCallbackInfo *)buffer->buffer_mirror[i]; - for (j = 0; j < me->num_tracks; j++) { -- free((ti + j)->records); -+ oggplay_free((ti + j)->records); - } -- free(ti); -+ oggplay_free(ti); - } - } - -- free(buffer->buffer_list); -- free(buffer->buffer_mirror); -+ oggplay_free(buffer->buffer_list); -+ oggplay_free(buffer->buffer_mirror); - SEM_CLOSE(buffer->frame_sem); -- free(buffer); -+ oggplay_free(buffer); - } - - int -@@ -147,6 +164,9 @@ oggplay_buffer_callback(OggPlay *me, int tracks, - OggPlayCallbackInfo * ptr = track_info[0]; - int required; - -+ if (me == NULL) -+ return -1; -+ - buffer = (OggPlayBuffer *)me->buffer; - - if (buffer == NULL) { -@@ -190,9 +210,9 @@ oggplay_buffer_callback(OggPlay *me, int tracks, - /* free these here, because we couldn't free them in - * oggplay_callback_info_destroy for buffer mode - */ -- free((ti + i)->records); -+ oggplay_free((ti + i)->records); - } -- free(ti); -+ oggplay_free(ti); - buffer->buffer_mirror[k] = NULL; - } - } -@@ -200,7 +220,10 @@ oggplay_buffer_callback(OggPlay *me, int tracks, - /* - * replace the decode_data buffer for the next callback - */ -- me->callback_info = (OggPlayCallbackInfo *)calloc(me->num_tracks, sizeof (OggPlayCallbackInfo)); -+ me->callback_info = -+ (OggPlayCallbackInfo *)oggplay_calloc(me->num_tracks, sizeof (OggPlayCallbackInfo)); -+ if (me->callback_info == NULL) -+ return -1; - - /* - * fill both mirror and list, mirror first to avoid getting inconsistencies -@@ -256,7 +279,9 @@ oggplay_buffer_retrieve_next(OggPlay *me) { - next_item = (OggPlayCallbackInfo*)buffer->buffer_list[next_loc]; - buffer->last_emptied = next_loc; - -- return_val = malloc(sizeof (OggPlayCallbackInfo *) * me->num_tracks); -+ return_val = oggplay_calloc(me->num_tracks, sizeof (OggPlayCallbackInfo *)); -+ if (return_val == NULL) -+ return NULL; - - for (i = 0; i < me->num_tracks; i++) { - return_val[i] = next_item + i; -@@ -289,7 +314,7 @@ oggplay_buffer_release(OggPlay *me, OggPlayCallbackInfo **track_info) { - return E_OGGPLAY_UNINITIALISED; - } - -- free(track_info); -+ oggplay_free(track_info); - - buffer->buffer_list[buffer->last_emptied] = NULL; - -@@ -317,7 +342,8 @@ oggplay_use_buffer(OggPlay *me, int size) { - return E_OGGPLAY_OK; - } - -- me->buffer = oggplay_buffer_new_buffer(size); -+ if( (me->buffer = oggplay_buffer_new_buffer(size)) == NULL) -+ return E_OGGPLAY_OUT_OF_MEMORY; - - /* - * if oggplay is already initialised, then prepare the buffer now -@@ -334,6 +360,9 @@ oggplay_buffer_prepare(OggPlay *me) { - - int i; - -+ if (me == NULL) -+ return; -+ - oggplay_set_data_callback_force(me, &oggplay_buffer_callback, NULL); - - for (i = 0; i < me->num_tracks; i++) { -diff --git a/src/liboggplay/oggplay_buffer.h b/src/liboggplay/oggplay_buffer.h -index a356514..7a38976 100644 ---- a/src/liboggplay/oggplay_buffer.h -+++ b/src/liboggplay/oggplay_buffer.h -@@ -39,6 +39,13 @@ - #ifndef __OGGPLAY_BUFFER_H__ - #define __OGGPLAY_BUFFER_H__ - -+/** -+ * Creates a new buffer with the given size. -+ * -+ * @param size The number of frames the buffer can store. -+ * @return A new OggPlayBuffer. -+ * @retval NULL in case of error. -+ */ - OggPlayBuffer * - oggplay_buffer_new_buffer(int size); - -diff --git a/src/liboggplay/oggplay_callback.c b/src/liboggplay/oggplay_callback.c -index 6916838..5a4d1ba 100644 ---- a/src/liboggplay/oggplay_callback.c -+++ b/src/liboggplay/oggplay_callback.c -@@ -315,6 +315,8 @@ oggplay_fish_sound_callback_floats(FishSound * fsound, float ** pcm, - */ - oggplay_data_handle_audio_data(&(decoder->decoder), (short *)pcm, frames, - sizeof(float)); -+ -+ return FISH_SOUND_STOP_ERR; - } - - return FISH_SOUND_CONTINUE; -@@ -473,10 +475,17 @@ OggPlayCallbackFunctions callbacks[] = { - OggPlayDecode * - oggplay_initialise_decoder(OggPlay *me, int content_type, int serialno) { - -- ogg_int64_t num; -- ogg_int64_t denom; -+ ogg_int64_t num; -+ ogg_int64_t denom; -+ OggPlayDecode *decoder = NULL; -+ -+ if (me == NULL) -+ return NULL; -+ -+ decoder = oggplay_malloc (callbacks[content_type].size); - -- OggPlayDecode * decoder = malloc (callbacks[content_type].size); -+ if (decoder == NULL) -+ return NULL; - - decoder->serialno = serialno; - decoder->content_type = content_type; -@@ -538,8 +547,7 @@ oggplay_callback_shutdown(OggPlayDecode *decoder) { - - oggplay_data_shutdown_list(decoder); - -- free(decoder); -- -+ oggplay_free(decoder); - } - - -@@ -595,11 +603,20 @@ oggplay_callback_predetected (OGGZ *oggz, ogg_packet *op, long serialno, - } - } - -- me->callback_info = realloc (me->callback_info, -+ me->callback_info = oggplay_realloc (me->callback_info, - sizeof (OggPlayCallbackInfo) * ++me->num_tracks); -- me->decode_data = realloc (me->decode_data, sizeof (long) * me->num_tracks); -+ if (me->callback_info == NULL) -+ return -1; -+ -+ me->decode_data = oggplay_realloc (me->decode_data, sizeof (long) * me->num_tracks); -+ if (me->decode_data == NULL) -+ return -1; -+ - me->decode_data[me->num_tracks - 1] = oggplay_initialise_decoder(me, - content_type, serialno); -+ if (me->decode_data[me->num_tracks - 1] == NULL) -+ return -1; -+ - /*me->decode_data->callback_info = me->callback_info + (me->num_tracks - 1);*/ - - /* -diff --git a/src/liboggplay/oggplay_callback.h b/src/liboggplay/oggplay_callback.h -index b6e1204..c6ddac1 100644 ---- a/src/liboggplay/oggplay_callback.h -+++ b/src/liboggplay/oggplay_callback.h -@@ -45,6 +45,17 @@ oggplay_callback_predetected (OGGZ *oggz, ogg_packet *op, long serialno, - void - oggplay_process_leftover_packet(OggPlay *me); - -+/** -+ * Create and initialise an OggPlayDecode handle. -+ * -+ * -+ * -+ * @param me OggPlay -+ * @param content_type -+ * @param serialno -+ * @return A new OggPlayDecode handle -+ * @retval NULL in case of error. -+ */ - OggPlayDecode * - oggplay_initialise_decoder(OggPlay *me, int content_type, int serialno); - -diff --git a/src/liboggplay/oggplay_callback_info.c b/src/liboggplay/oggplay_callback_info.c -index 2363744..cbfb6ab 100644 ---- a/src/liboggplay/oggplay_callback_info.c -+++ b/src/liboggplay/oggplay_callback_info.c -@@ -40,7 +40,7 @@ - - #define M(x) ((x) >> 32) - --void _print_list(char *name, OggPlayDataHeader *p); -+extern void _print_list(char *name, OggPlayDataHeader *p); - - int - oggplay_callback_info_prepare(OggPlay *me, OggPlayCallbackInfo ***info) { -@@ -56,7 +56,9 @@ oggplay_callback_info_prepare(OggPlay *me, OggPlayCallbackInfo ***info) { - /* - * allocate the structure for return to the user - */ -- (*info) = malloc (me->num_tracks * sizeof (OggPlayCallbackInfo *)); -+ (*info) = oggplay_calloc (me->num_tracks, sizeof (OggPlayCallbackInfo *)); -+ if ((*info) == NULL) -+ return -1; - - /* - * fill in each active track. Leave gaps for inactive tracks. -@@ -128,7 +130,18 @@ oggplay_callback_info_prepare(OggPlay *me, OggPlayCallbackInfo ***info) { - } - - /* null-terminate the record list for the python interface */ -- track_info->records = malloc ((count + 1) * sizeof (OggPlayDataHeader *)); -+ track_info->records = oggplay_calloc ((count + 1), sizeof (OggPlayDataHeader *)); -+ if (track_info->records == NULL) -+ { -+ for (i = 0; i < me->num_tracks; i++) { -+ if ((*info)[i]->records != NULL) -+ oggplay_free ((*info)[i]->records); -+ } -+ oggplay_free (*info); -+ *info = NULL; -+ return -1; -+ } -+ - track_info->records[count] = NULL; - - track_info->available_records = count; -@@ -270,18 +283,20 @@ oggplay_callback_info_prepare(OggPlay *me, OggPlayCallbackInfo ***info) { - * and callback creation - */ - for (i = 0; i < me->num_tracks; i++) { -- if ((*info)[i]->records != NULL) free((*info)[i]->records); -+ if ((*info)[i]->records != NULL) -+ oggplay_free((*info)[i]->records); - } -- free(*info); -+ oggplay_free(*info); - (*info) = NULL; - - } - - if (tcount == 0) { - for (i = 0; i < me->num_tracks; i++) { -- if ((*info)[i]->records != NULL) free((*info)[i]->records); -+ if ((*info)[i]->records != NULL) -+ oggplay_free((*info)[i]->records); - } -- free(*info); -+ oggplay_free(*info); - (*info) = NULL; - } - -@@ -299,10 +314,10 @@ oggplay_callback_info_destroy(OggPlay *me, OggPlayCallbackInfo **info) { - for (i = 0; i < me->num_tracks; i++) { - p = info[i]; - if (me->buffer == NULL && p->records != NULL) -- free(p->records); -+ oggplay_free(p->records); - } - -- free(info); -+ oggplay_free(info); - - } - -diff --git a/src/liboggplay/oggplay_data.c b/src/liboggplay/oggplay_data.c -index 3055f0e..0bf7651 100644 ---- a/src/liboggplay/oggplay_data.c -+++ b/src/liboggplay/oggplay_data.c -@@ -157,7 +157,7 @@ oggplay_data_add_to_list (OggPlayDecode *decode, OggPlayDataHeader *data) { - if (untimed->presentation_time >= decode->player->presentation_time) { - oggplay_data_add_to_list_front(decode, untimed); - } else { -- free(untimed); -+ oggplay_free(untimed); - } - - } -@@ -188,7 +188,7 @@ oggplay_data_free_list(OggPlayDataHeader *list) { - while (list != NULL) { - p = list; - list = list->next; -- free(p); -+ oggplay_free(p); - } - } - -@@ -236,13 +236,13 @@ oggplay_data_clean_list (OggPlayDecode *decode) { - decode->data_list = decode->data_list->next; - if (decode->data_list == NULL) - decode->end_of_data_list = NULL; -- free (header); -+ oggplay_free (header); - header = decode->data_list; - } else { - if (header->next == NULL) - decode->end_of_data_list = p; - p->next = header->next; -- free (header); -+ oggplay_free (header); - header = p->next; - } - } else { -@@ -271,12 +271,15 @@ oggplay_data_handle_audio_data (OggPlayDecode *decode, void *data, - int samples, int samplesize) { - - int num_channels; -- OggPlayAudioRecord * record; -+ OggPlayAudioRecord * record = NULL; - - num_channels = ((OggPlayAudioDecode *)decode)->sound_info.channels; -- record = (OggPlayAudioRecord*)calloc(sizeof(OggPlayAudioRecord) + -+ record = (OggPlayAudioRecord*)oggplay_calloc(sizeof(OggPlayAudioRecord) + - samples * samplesize * num_channels, 1); - -+ if (record == NULL) -+ return; -+ - oggplay_data_initialise_header(decode, &(record->header)); - - record->header.samples_in_record = samples; -@@ -295,10 +298,14 @@ void - oggplay_data_handle_cmml_data(OggPlayDecode *decode, unsigned char *data, - int size) { - -- OggPlayTextRecord * record; -+ OggPlayTextRecord * record = NULL; - - record = -- (OggPlayTextRecord*)calloc (sizeof(OggPlayTextRecord) + size + 1, 1); -+ (OggPlayTextRecord*)oggplay_calloc (sizeof(OggPlayTextRecord) + size + 1, 1); -+ -+ if (record == NULL) -+ return; -+ - oggplay_data_initialise_header(decode, &(record->header)); - - record->header.samples_in_record = 1; -@@ -336,7 +343,11 @@ oggplay_data_handle_theora_frame (OggPlayTheoraDecode *decode, - * we need to set the output strides to the input widths because we are - * trying not to pass negative output stride issues on to the poor user. - */ -- record = (OggPlayVideoRecord*)malloc (size); -+ record = (OggPlayVideoRecord*)oggplay_malloc (size); -+ -+ if (record == NULL) -+ return; -+ - record->header.samples_in_record = 1; - data = &(record->data); - oggplay_data_initialise_header((OggPlayDecode *)decode, &(record->header)); -@@ -379,9 +390,13 @@ oggplay_data_handle_kate_data(OggPlayKateDecode *decode, const kate_event *ev) { - - // TODO: should be able to send the data rendered as YUV data, but just text for now - -- OggPlayTextRecord * record; -+ OggPlayTextRecord * record = NULL; -+ -+ record = (OggPlayTextRecord*)oggplay_calloc (sizeof(OggPlayTextRecord) + ev->len0, 1); -+ -+ if (record = NULL) -+ return; - -- record = (OggPlayTextRecord*)calloc (sizeof(OggPlayTextRecord) + ev->len0, 1); - oggplay_data_initialise_header(&decode->decoder, &(record->header)); - - //record->header.presentation_time = (ogg_int64_t)(ev->start_time*1000); -diff --git a/src/liboggplay/oggplay_file_reader.c b/src/liboggplay/oggplay_file_reader.c -index 789049f..1ec0f42 100644 ---- a/src/liboggplay/oggplay_file_reader.c -+++ b/src/liboggplay/oggplay_file_reader.c -@@ -76,7 +76,7 @@ oggplay_file_reader_destroy(OggPlayReader * opr) { - me = (OggPlayFileReader *)opr; - - fclose(me->file); -- free(me); -+ oggplay_free(me); - - return E_OGGPLAY_OK; - } -@@ -135,7 +135,10 @@ oggplay_file_reader_io_tell(void * user_handle) { - OggPlayReader * - oggplay_file_reader_new(char *file_name) { - -- OggPlayFileReader * me = malloc (sizeof (OggPlayFileReader)); -+ OggPlayFileReader * me = oggplay_malloc (sizeof (OggPlayFileReader)); -+ -+ if (me == NULL) -+ return NULL; - - me->current_position = 0; - me->file_name = file_name; -diff --git a/src/liboggplay/oggplay_private.h b/src/liboggplay/oggplay_private.h -index c4743e6..7e5b9de 100644 ---- a/src/liboggplay/oggplay_private.h -+++ b/src/liboggplay/oggplay_private.h -@@ -240,47 +240,15 @@ typedef struct { - int size; - } OggPlayCallbackFunctions; - -+/* Allocate and free dynamic memory used by ogg. -+ * By default they are the ones from stdlib */ -+#define oggplay_malloc _ogg_malloc -+#define oggplay_calloc _ogg_calloc -+#define oggplay_realloc _ogg_realloc -+#define oggplay_free _ogg_free -+ - #include "oggplay_callback.h" - #include "oggplay_data.h" - #include "oggplay_buffer.h" - --#if 0 --static inline void _free(void *x) { -- printf("%p\n", x); -- free(x); --} -- --static inline void *_malloc(int s) { -- void *x; -- printf("%d ", s); -- x = malloc(s); -- printf("%p\n", x); -- return x; --} -- --static inline void *_realloc(void *x, int s) { -- void *y; -- printf("%p %d ", x, s); -- y = realloc(x, s); -- printf("%p\n", y); -- return y; --} -- --static inline void *_calloc(int n, int s) { -- void *x; -- printf("%d %d ", n, s); -- x = calloc(n, s); -- printf("%p\n", x); -- return x; --} -- --#define free(x) {printf("FREE %s %d ", __FILE__, __LINE__); _free(x);} --#define malloc(s) (printf("MALLOC %s %d ", __FILE__, __LINE__), \ -- _malloc(s)) --#define realloc(x, s) (printf("REALLOC %s %d ", __FILE__, __LINE__), \ -- _realloc(x, s)) --#define calloc(n, s) (printf("CALLOC %s %d ", __FILE__, __LINE__), \ -- _calloc(n, s)) --#endif -- - #endif -diff --git a/src/liboggplay/oggplay_seek.c b/src/liboggplay/oggplay_seek.c -index 415ce0f..f93552f 100644 ---- a/src/liboggplay/oggplay_seek.c -+++ b/src/liboggplay/oggplay_seek.c -@@ -87,13 +87,19 @@ oggplay_seek_cleanup(OggPlay* me, ogg_int64_t milliseconds) - OggPlayDataHeader ** end_of_list_p; - int i; - -+ if (me == NULL) -+ return; -+ - /* - * first, create a trash object to store the context that we want to - * delete but can't until the presentation thread is no longer using it - - * this will occur as soon as the thread calls oggplay_buffer_release_next - */ - -- trash = calloc(sizeof(OggPlaySeekTrash), 1); -+ trash = oggplay_calloc(1, sizeof(OggPlaySeekTrash)); -+ -+ if (trash == NULL) -+ return; - - /* - * store the old buffer in it next. -@@ -106,6 +112,11 @@ oggplay_seek_cleanup(OggPlay* me, ogg_int64_t milliseconds) - */ - me->buffer = oggplay_buffer_new_buffer(me->buffer->buffer_size); - -+ if (me->buffer == NULL) -+ { -+ return; -+ } -+ - /* - * strip all of the data packets out of the streams and put them into the - * trash. We can free the untimed packets immediately - they are USELESS -@@ -152,12 +163,12 @@ oggplay_take_out_trash(OggPlay *me, OggPlaySeekTrash *trash) { - oggplay_buffer_shutdown(me, trash->old_buffer); - oggplay_data_free_list(trash->old_data); - if (p != NULL) { -- free(p); -+ oggplay_free(p); - } - p = trash; - } - - if (p != NULL) { -- free(p); -+ oggplay_free(p); - } - } -diff --git a/src/liboggplay/oggplay_tcp_reader.c b/src/liboggplay/oggplay_tcp_reader.c -index c2d55fb..e40d2da 100644 ---- a/src/liboggplay/oggplay_tcp_reader.c -+++ b/src/liboggplay/oggplay_tcp_reader.c -@@ -148,13 +148,21 @@ oggplay_create_socket() { - return sock; - } - --/* -- * this function guarantees it will return malloced versions of host and -+/** -+ * This function guarantees it will return malloced versions of host and - * path -+ * -+ * @param location Location of the Ogg content -+ * @param proxy The proxy if there's any. -+ * @param proxy_port The port of the proxy if there's any. -+ * @param host The host to connect to; using proxy if set. -+ * @param port The port to connect to; -+ * @param path The path where the content resides on the server. -+ * @retval -1 in case of error, 0 otherwise. - */ --void -+int - oggplay_hostname_and_path(char *location, char *proxy, int proxy_port, -- char **host, int *port, char **path) { -+ char **host, int *port, char **path) { - - - char * colon; -@@ -163,10 +171,15 @@ oggplay_hostname_and_path(char *location, char *proxy, int proxy_port, - - /* if we have a proxy installed this is all dead simple */ - if (proxy != NULL) { -- *host = strdup(proxy); -+ if ((*host = strdup(proxy)) == NULL) -+ goto error; -+ - *port = proxy_port; -- *path = strdup(location); -- return; -+ -+ if ((*path = strdup(location)) == NULL) -+ goto error; -+ -+ return 0; - } - - /* find start_pos */ -@@ -181,10 +194,15 @@ oggplay_hostname_and_path(char *location, char *proxy, int proxy_port, - * if both are null, then just set the simple defaults and return - */ - if (colon == NULL && slash == NULL) { -- *host = strdup(location); -+ if ((*host = strdup(location)) == NULL) -+ goto error; -+ - *port = 80; -- *path = strdup("/"); -- return; -+ -+ if ((*path = strdup("/") == NULL)) -+ goto error; -+ -+ return 0; - } - - /* -@@ -208,16 +226,29 @@ oggplay_hostname_and_path(char *location, char *proxy, int proxy_port, - end_of_host = slash; - } - -- *host = strdup(location); -+ if ((*host = strdup(location)) == NULL) -+ goto error; -+ - (*host)[end_of_host - location] = '\0'; - - if (slash == NULL) { -- *path = strdup("/"); -- return; -+ if ((*path = strdup("/")) == NULL) -+ goto error; -+ -+ return 0; - } - -- *path = strdup(slash); -+ if ((*path = strdup(slash)) == NULL) -+ goto error; -+ -+ return 0; -+ -+error: -+ /* there has been an error while copying strings... */ -+ if (*host != NULL) -+ oggplay_free(*host); - -+ return -1; - } - - OggPlayErrorCode -@@ -303,8 +334,9 @@ oggplay_tcp_reader_initialise(OggPlayReader * opr, int block) { - /* - * Extract the host name and the path from the location. - */ -- oggplay_hostname_and_path(me->location, me->proxy, me->proxy_port, -- &host, &port, &path); -+ if (oggplay_hostname_and_path(me->location, me->proxy, me->proxy_port, -+ &host, &port, &path) != 0) -+ return E_OGGPLAY_OUT_OF_MEMORY; - - - /* -@@ -320,8 +352,8 @@ oggplay_tcp_reader_initialise(OggPlayReader * opr, int block) { - - he = gethostbyname(host); - -- free(host); -- free(path); -+ oggplay_free(host); -+ oggplay_free(path); - - if (he == NULL) { - printf("Host not found\n"); -@@ -374,7 +406,10 @@ oggplay_tcp_reader_initialise(OggPlayReader * opr, int block) { - int found_http_response = 0; - - if (me->buffer == NULL) { -- me->buffer = (unsigned char*)malloc(TCP_READER_MAX_IN_MEMORY); -+ me->buffer = (unsigned char*)oggplay_malloc(TCP_READER_MAX_IN_MEMORY); -+ if (me->buffer == NULL) -+ return E_OGGPLAY_OUT_OF_MEMORY; -+ - me->buffer_size = TCP_READER_MAX_IN_MEMORY; - me->amount_in_memory = 0; - } -@@ -514,12 +549,12 @@ oggplay_tcp_reader_destroy(OggPlayReader * opr) { - #endif - } - -- free(me->buffer); -- free(me->location); -+ if (me->buffer != NULL) oggplay_free(me->buffer); -+ if (me->location != NULL) oggplay_free(me->location); - if (me->backing_store != NULL) { - fclose(me->backing_store); - } -- free(me); -+ oggplay_free(me); - return E_OGGPLAY_OK; - } - -@@ -661,14 +696,22 @@ oggplay_tcp_reader_io_tell(void * user_handle) { - OggPlayReader * - oggplay_tcp_reader_new(char *location, char *proxy, int proxy_port) { - -- OggPlayTCPReader * me = (OggPlayTCPReader *)malloc (sizeof (OggPlayTCPReader)); -+ OggPlayTCPReader * me = (OggPlayTCPReader *)oggplay_malloc (sizeof (OggPlayTCPReader)); -+ -+ if (me == NULL) -+ return NULL; - - me->state = OTRS_UNINITIALISED; - me->socket = INVALID_SOCKET; - me->buffer = NULL; - me->buffer_size = 0; - me->current_position = 0; -- me->location = strdup(location); -+ /* if there's not enough memory to copy the URI cancel the initialisation */ -+ if ( (me->location = strdup(location)) == NULL) -+ { -+ oggplay_tcp_reader_destroy ((OggPlayReader*)me); -+ return NULL; -+ } - me->amount_in_memory = 0; - me->backing_store = NULL; - me->stored_offset = 0; diff --git a/media/liboggplay/bug468281_r3864.patch b/media/liboggplay/bug468281_r3864.patch deleted file mode 100644 index f6b7fbab8cf..00000000000 --- a/media/liboggplay/bug468281_r3864.patch +++ /dev/null @@ -1,23 +0,0 @@ -commit b16896c4b4c77dcff5d77851e17ab2846372e935 -Author: oggk -Date: Tue Feb 24 23:19:59 2009 +0000 - - fix crucially misplaced parenthesis - - - - git-svn-id: http://svn.annodex.net/liboggplay/trunk@3864 8158c8cd-e7e1-0310-9fa4-c5954c97daef - -diff --git a/src/liboggplay/oggplay_tcp_reader.c b/src/liboggplay/oggplay_tcp_reader.c -index e40d2da..3becb6d 100644 ---- a/src/liboggplay/oggplay_tcp_reader.c -+++ b/src/liboggplay/oggplay_tcp_reader.c -@@ -199,7 +199,7 @@ oggplay_hostname_and_path(char *location, char *proxy, int proxy_port, - - *port = 80; - -- if ((*path = strdup("/") == NULL)) -+ if ((*path = strdup("/")) == NULL) - goto error; - - return 0; diff --git a/media/liboggplay/include/oggplay/oggplay.h b/media/liboggplay/include/oggplay/oggplay.h index cdcb168919f..019958a694b 100644 --- a/media/liboggplay/include/oggplay/oggplay.h +++ b/media/liboggplay/include/oggplay/oggplay.h @@ -56,27 +56,20 @@ typedef int (OggPlayDataCallback)(OggPlay *player, int num_records, #include #include #include +/* +#include +#include +*/ + +OggPlay * +oggplay_init(void); + +OggPlayErrorCode +oggplay_set_reader(OggPlay *OS, OggPlayReader *OSR); -/** - * Create an OggPlay handle associated with the given reader. - * The functions creates a new OggPlay handle and associates with - * the given OggPlayReader and initialises the buffer. - * - * - * @param reader an OggPlayReader handle associated with the Ogg content - * @return A new OggPlay handle - * @retval NULL in case of error. - */ OggPlay * oggplay_open_with_reader(OggPlayReader *reader); -/** - * Create a new OggPlay handle associated with the given reader. - * - * \param reader OggPlayReader handle associated with the Ogg content - * \return A new OggPlay handle - * \retval NULL in case of error. - */ OggPlay * oggplay_new_with_reader(OggPlayReader *reader); @@ -135,13 +128,6 @@ oggplay_buffer_release(OggPlay *player, OggPlayCallbackInfo **track_info); void oggplay_prepare_for_close(OggPlay *me); -/** - * @brief Destroys the OggPlay handle along with the associated OggPlayReader - * and clears out the buffer and shuts down the callback function. - * - * @param player an OggPlay handle - * @retval E_OGGPLAY_OK on success - */ OggPlayErrorCode oggplay_close(OggPlay *player); diff --git a/media/liboggplay/include/oggplay/oggplay_enums.h b/media/liboggplay/include/oggplay/oggplay_enums.h index 6f4790f180f..cda068f9766 100644 --- a/media/liboggplay/include/oggplay/oggplay_enums.h +++ b/media/liboggplay/include/oggplay/oggplay_enums.h @@ -62,7 +62,6 @@ typedef enum OggPlayErrorCode { E_OGGPLAY_TIMEOUT = -17, E_OGGPLAY_CANT_SEEK = -18, E_OGGPLAY_NO_KATE_SUPPORT = -19, - E_OGGPLAY_OUT_OF_MEMORY = -20, E_OGGPLAY_NOTCHICKENPAYBACK = -777 } OggPlayErrorCode; diff --git a/media/liboggplay/include/oggplay/oggplay_reader.h b/media/liboggplay/include/oggplay/oggplay_reader.h index 21b5206b035..992f416acd5 100644 --- a/media/liboggplay/include/oggplay/oggplay_reader.h +++ b/media/liboggplay/include/oggplay/oggplay_reader.h @@ -63,25 +63,9 @@ typedef struct _OggPlayReader { long (*io_tell)(void *user_handle); } OggPlayReader; -/** - * Create and initialise an OggPlayReader for a given Ogg file. - * - * @param filename The file to open - * @return A new OggPlayReader handle - * @retval NULL on error. - */ OggPlayReader * oggplay_file_reader_new(char *filename); -/** - * Create and initialise an OggPlayReader for an Ogg content at a given URI. - * - * @param uri The URI to the Ogg file. - * @param proxy Proxy - * @param proxy_port Proxy port. - * @return A new OggPlayReader handle - * @retval NULL on error. - */ OggPlayReader * oggplay_tcp_reader_new(char *uri, char *proxy, int proxy_port); diff --git a/media/liboggplay/src/liboggplay/oggplay.c b/media/liboggplay/src/liboggplay/oggplay.c index 8fa3b9e238b..62851fdc73d 100644 --- a/media/liboggplay/src/liboggplay/oggplay.c +++ b/media/liboggplay/src/liboggplay/oggplay.c @@ -48,15 +48,7 @@ OggPlay * oggplay_new_with_reader(OggPlayReader *reader) { - OggPlay * me = NULL; - - /* check whether the reader is valid. */ - if (reader == NULL) - return NULL; - - me = (OggPlay *)oggplay_malloc (sizeof(OggPlay)); - if (me == NULL) - return NULL; + OggPlay * me = (OggPlay *)malloc(sizeof(OggPlay)); me->reader = reader; me->decode_data = NULL; @@ -102,20 +94,10 @@ oggplay_initialise(OggPlay *me, int block) { * the main loop */ me->oggz = oggz_new(OGGZ_READ | OGGZ_AUTO); - if (me->oggz == NULL) - return E_OGGPLAY_OGGZ_UNHAPPY; - - if (oggz_io_set_read(me->oggz, me->reader->io_read, me->reader) != 0) - return E_OGGPLAY_OGGZ_UNHAPPY; - - if (oggz_io_set_seek(me->oggz, me->reader->io_seek, me->reader) != 0) - return E_OGGPLAY_OGGZ_UNHAPPY; - - if (oggz_io_set_tell(me->oggz, me->reader->io_tell, me->reader) != 0) - return E_OGGPLAY_OGGZ_UNHAPPY; - - if (oggz_set_read_callback(me->oggz, -1, oggplay_callback_predetected, me)) - return E_OGGPLAY_OGGZ_UNHAPPY; + oggz_io_set_read(me->oggz, me->reader->io_read, me->reader); + oggz_io_set_seek(me->oggz, me->reader->io_seek, me->reader); + oggz_io_set_tell(me->oggz, me->reader->io_tell, me->reader); + oggz_set_read_callback(me->oggz, -1, oggplay_callback_predetected, me); while (1) { @@ -149,20 +131,15 @@ oggplay_initialise(OggPlay *me, int block) { OggPlay * oggplay_open_with_reader(OggPlayReader *reader) { - OggPlay *me = NULL; + OggPlay *me = oggplay_new_with_reader(reader); + int r = E_OGGPLAY_TIMEOUT; - - if ( (me = oggplay_new_with_reader(reader)) == NULL) - return NULL; - while (r == E_OGGPLAY_TIMEOUT) { r = oggplay_initialise(me, 0); } if (r != E_OGGPLAY_OK) { - /* in case of error close the OggPlay handle */ - oggplay_close(me); - + free(me); return NULL; } @@ -218,7 +195,6 @@ oggplay_set_callback_num_frames(OggPlay *me, int track, int frames) { me->callback_period = me->decode_data[track]->granuleperiod * frames; me->target = me->presentation_time + me->callback_period - 1; -// printf("targ: %lld, callback_per: %lld, prestime: %lld\n", me->target, me->callback_period,me->presentation_time ); return E_OGGPLAY_OK; @@ -547,7 +523,7 @@ read_more_data: } /* - * ensure all tracks have their final data packet set to end_of_stream + * ensure all tracks have their final data packet set to end_of_stream. * But skip doing this if we're shutting down --- me->buffer may not * be in a safe state. */ @@ -620,21 +596,17 @@ oggplay_close(OggPlay *me) { me->reader->destroy(me->reader); } - - if (me->decode_data) { - for (i = 0; i < me->num_tracks; i++) { - oggplay_callback_shutdown(me->decode_data[i]); - } + for (i = 0; i < me->num_tracks; i++) { + oggplay_callback_shutdown(me->decode_data[i]); } - if (me->oggz) - oggz_close(me->oggz); + oggz_close(me->oggz); if (me->buffer != NULL) { oggplay_buffer_shutdown(me, me->buffer); } - oggplay_free(me); + free(me); return E_OGGPLAY_OK; } @@ -715,4 +687,3 @@ oggplay_media_finished_retrieving(OggPlay *me) { return me->reader->finished_retrieving(me->reader); } - diff --git a/media/liboggplay/src/liboggplay/oggplay_buffer.c b/media/liboggplay/src/liboggplay/oggplay_buffer.c index b116c7f424f..e752f338149 100644 --- a/media/liboggplay/src/liboggplay/oggplay_buffer.c +++ b/media/liboggplay/src/liboggplay/oggplay_buffer.c @@ -53,43 +53,26 @@ OggPlayBuffer * oggplay_buffer_new_buffer(int size) { - OggPlayBuffer *buffer = NULL; + OggPlayBuffer *buffer = 0; if (size < 0) { size = OGGPLAY_DEFAULT_BUFFER_SIZE; } - buffer = (OggPlayBuffer*)oggplay_malloc(sizeof (OggPlayBuffer)); + buffer = (OggPlayBuffer*)malloc(sizeof (OggPlayBuffer)); - if (buffer == NULL) - return NULL; - - buffer->buffer_list = oggplay_calloc(size, sizeof (void *)); - if (buffer->buffer_list == NULL) - goto error; - - buffer->buffer_mirror = oggplay_calloc(size, sizeof (void *)); - if (buffer->buffer_mirror == NULL) - goto error; + buffer->buffer_list = malloc(sizeof (void *) * size); + memset(buffer->buffer_list, 0, sizeof (void *) * size); + buffer->buffer_mirror = malloc(sizeof (void *) * size); + memset(buffer->buffer_mirror, 0, sizeof (void *) * size); buffer->buffer_size = size; buffer->last_filled = -1; buffer->last_emptied = -1; - if (SEM_CREATE(buffer->frame_sem, size) != 0) - goto error; + SEM_CREATE(buffer->frame_sem, size); return buffer; -error: - if (buffer->buffer_list != NULL) - oggplay_free (buffer->buffer_list); - - if (buffer->buffer_mirror != NULL) - oggplay_free (buffer->buffer_mirror); - - oggplay_free (buffer); - - return NULL; } void @@ -104,16 +87,16 @@ oggplay_buffer_shutdown(OggPlay *me, volatile OggPlayBuffer *vbuffer) { if (buffer->buffer_mirror[i] != NULL) { OggPlayCallbackInfo *ti = (OggPlayCallbackInfo *)buffer->buffer_mirror[i]; for (j = 0; j < me->num_tracks; j++) { - oggplay_free((ti + j)->records); + free((ti + j)->records); } - oggplay_free(ti); + free(ti); } } - oggplay_free(buffer->buffer_list); - oggplay_free(buffer->buffer_mirror); + free(buffer->buffer_list); + free(buffer->buffer_mirror); SEM_CLOSE(buffer->frame_sem); - oggplay_free(buffer); + free(buffer); } int @@ -164,9 +147,6 @@ oggplay_buffer_callback(OggPlay *me, int tracks, OggPlayCallbackInfo * ptr = track_info[0]; int required; - if (me == NULL) - return -1; - buffer = (OggPlayBuffer *)me->buffer; if (buffer == NULL) { @@ -210,9 +190,9 @@ oggplay_buffer_callback(OggPlay *me, int tracks, /* free these here, because we couldn't free them in * oggplay_callback_info_destroy for buffer mode */ - oggplay_free((ti + i)->records); + free((ti + i)->records); } - oggplay_free(ti); + free(ti); buffer->buffer_mirror[k] = NULL; } } @@ -220,10 +200,7 @@ oggplay_buffer_callback(OggPlay *me, int tracks, /* * replace the decode_data buffer for the next callback */ - me->callback_info = - (OggPlayCallbackInfo *)oggplay_calloc(me->num_tracks, sizeof (OggPlayCallbackInfo)); - if (me->callback_info == NULL) - return -1; + me->callback_info = (OggPlayCallbackInfo *)calloc(me->num_tracks, sizeof (OggPlayCallbackInfo)); /* * fill both mirror and list, mirror first to avoid getting inconsistencies @@ -279,9 +256,7 @@ oggplay_buffer_retrieve_next(OggPlay *me) { next_item = (OggPlayCallbackInfo*)buffer->buffer_list[next_loc]; buffer->last_emptied = next_loc; - return_val = oggplay_calloc(me->num_tracks, sizeof (OggPlayCallbackInfo *)); - if (return_val == NULL) - return NULL; + return_val = malloc(sizeof (OggPlayCallbackInfo *) * me->num_tracks); for (i = 0; i < me->num_tracks; i++) { return_val[i] = next_item + i; @@ -314,7 +289,7 @@ oggplay_buffer_release(OggPlay *me, OggPlayCallbackInfo **track_info) { return E_OGGPLAY_UNINITIALISED; } - oggplay_free(track_info); + free(track_info); buffer->buffer_list[buffer->last_emptied] = NULL; @@ -342,8 +317,7 @@ oggplay_use_buffer(OggPlay *me, int size) { return E_OGGPLAY_OK; } - if( (me->buffer = oggplay_buffer_new_buffer(size)) == NULL) - return E_OGGPLAY_OUT_OF_MEMORY; + me->buffer = oggplay_buffer_new_buffer(size); /* * if oggplay is already initialised, then prepare the buffer now @@ -360,9 +334,6 @@ oggplay_buffer_prepare(OggPlay *me) { int i; - if (me == NULL) - return; - oggplay_set_data_callback_force(me, &oggplay_buffer_callback, NULL); for (i = 0; i < me->num_tracks; i++) { diff --git a/media/liboggplay/src/liboggplay/oggplay_buffer.h b/media/liboggplay/src/liboggplay/oggplay_buffer.h index 7a389769aa0..a356514dffa 100644 --- a/media/liboggplay/src/liboggplay/oggplay_buffer.h +++ b/media/liboggplay/src/liboggplay/oggplay_buffer.h @@ -39,13 +39,6 @@ #ifndef __OGGPLAY_BUFFER_H__ #define __OGGPLAY_BUFFER_H__ -/** - * Creates a new buffer with the given size. - * - * @param size The number of frames the buffer can store. - * @return A new OggPlayBuffer. - * @retval NULL in case of error. - */ OggPlayBuffer * oggplay_buffer_new_buffer(int size); diff --git a/media/liboggplay/src/liboggplay/oggplay_callback.c b/media/liboggplay/src/liboggplay/oggplay_callback.c index 5a4d1bad789..6916838676d 100644 --- a/media/liboggplay/src/liboggplay/oggplay_callback.c +++ b/media/liboggplay/src/liboggplay/oggplay_callback.c @@ -315,8 +315,6 @@ oggplay_fish_sound_callback_floats(FishSound * fsound, float ** pcm, */ oggplay_data_handle_audio_data(&(decoder->decoder), (short *)pcm, frames, sizeof(float)); - - return FISH_SOUND_STOP_ERR; } return FISH_SOUND_CONTINUE; @@ -475,17 +473,10 @@ OggPlayCallbackFunctions callbacks[] = { OggPlayDecode * oggplay_initialise_decoder(OggPlay *me, int content_type, int serialno) { - ogg_int64_t num; - ogg_int64_t denom; - OggPlayDecode *decoder = NULL; + ogg_int64_t num; + ogg_int64_t denom; - if (me == NULL) - return NULL; - - decoder = oggplay_malloc (callbacks[content_type].size); - - if (decoder == NULL) - return NULL; + OggPlayDecode * decoder = malloc (callbacks[content_type].size); decoder->serialno = serialno; decoder->content_type = content_type; @@ -547,7 +538,8 @@ oggplay_callback_shutdown(OggPlayDecode *decoder) { oggplay_data_shutdown_list(decoder); - oggplay_free(decoder); + free(decoder); + } @@ -603,20 +595,11 @@ oggplay_callback_predetected (OGGZ *oggz, ogg_packet *op, long serialno, } } - me->callback_info = oggplay_realloc (me->callback_info, + me->callback_info = realloc (me->callback_info, sizeof (OggPlayCallbackInfo) * ++me->num_tracks); - if (me->callback_info == NULL) - return -1; - - me->decode_data = oggplay_realloc (me->decode_data, sizeof (long) * me->num_tracks); - if (me->decode_data == NULL) - return -1; - + me->decode_data = realloc (me->decode_data, sizeof (long) * me->num_tracks); me->decode_data[me->num_tracks - 1] = oggplay_initialise_decoder(me, content_type, serialno); - if (me->decode_data[me->num_tracks - 1] == NULL) - return -1; - /*me->decode_data->callback_info = me->callback_info + (me->num_tracks - 1);*/ /* diff --git a/media/liboggplay/src/liboggplay/oggplay_callback.h b/media/liboggplay/src/liboggplay/oggplay_callback.h index c6ddac123cb..b6e1204f00b 100644 --- a/media/liboggplay/src/liboggplay/oggplay_callback.h +++ b/media/liboggplay/src/liboggplay/oggplay_callback.h @@ -45,17 +45,6 @@ oggplay_callback_predetected (OGGZ *oggz, ogg_packet *op, long serialno, void oggplay_process_leftover_packet(OggPlay *me); -/** - * Create and initialise an OggPlayDecode handle. - * - * - * - * @param me OggPlay - * @param content_type - * @param serialno - * @return A new OggPlayDecode handle - * @retval NULL in case of error. - */ OggPlayDecode * oggplay_initialise_decoder(OggPlay *me, int content_type, int serialno); diff --git a/media/liboggplay/src/liboggplay/oggplay_callback_info.c b/media/liboggplay/src/liboggplay/oggplay_callback_info.c index cbfb6ab30be..2363744e92b 100644 --- a/media/liboggplay/src/liboggplay/oggplay_callback_info.c +++ b/media/liboggplay/src/liboggplay/oggplay_callback_info.c @@ -40,7 +40,7 @@ #define M(x) ((x) >> 32) -extern void _print_list(char *name, OggPlayDataHeader *p); +void _print_list(char *name, OggPlayDataHeader *p); int oggplay_callback_info_prepare(OggPlay *me, OggPlayCallbackInfo ***info) { @@ -56,9 +56,7 @@ oggplay_callback_info_prepare(OggPlay *me, OggPlayCallbackInfo ***info) { /* * allocate the structure for return to the user */ - (*info) = oggplay_calloc (me->num_tracks, sizeof (OggPlayCallbackInfo *)); - if ((*info) == NULL) - return -1; + (*info) = malloc (me->num_tracks * sizeof (OggPlayCallbackInfo *)); /* * fill in each active track. Leave gaps for inactive tracks. @@ -130,18 +128,7 @@ oggplay_callback_info_prepare(OggPlay *me, OggPlayCallbackInfo ***info) { } /* null-terminate the record list for the python interface */ - track_info->records = oggplay_calloc ((count + 1), sizeof (OggPlayDataHeader *)); - if (track_info->records == NULL) - { - for (i = 0; i < me->num_tracks; i++) { - if ((*info)[i]->records != NULL) - oggplay_free ((*info)[i]->records); - } - oggplay_free (*info); - *info = NULL; - return -1; - } - + track_info->records = malloc ((count + 1) * sizeof (OggPlayDataHeader *)); track_info->records[count] = NULL; track_info->available_records = count; @@ -283,20 +270,18 @@ oggplay_callback_info_prepare(OggPlay *me, OggPlayCallbackInfo ***info) { * and callback creation */ for (i = 0; i < me->num_tracks; i++) { - if ((*info)[i]->records != NULL) - oggplay_free((*info)[i]->records); + if ((*info)[i]->records != NULL) free((*info)[i]->records); } - oggplay_free(*info); + free(*info); (*info) = NULL; } if (tcount == 0) { for (i = 0; i < me->num_tracks; i++) { - if ((*info)[i]->records != NULL) - oggplay_free((*info)[i]->records); + if ((*info)[i]->records != NULL) free((*info)[i]->records); } - oggplay_free(*info); + free(*info); (*info) = NULL; } @@ -314,10 +299,10 @@ oggplay_callback_info_destroy(OggPlay *me, OggPlayCallbackInfo **info) { for (i = 0; i < me->num_tracks; i++) { p = info[i]; if (me->buffer == NULL && p->records != NULL) - oggplay_free(p->records); + free(p->records); } - oggplay_free(info); + free(info); } diff --git a/media/liboggplay/src/liboggplay/oggplay_data.c b/media/liboggplay/src/liboggplay/oggplay_data.c index 4556b15258a..88c06c70563 100644 --- a/media/liboggplay/src/liboggplay/oggplay_data.c +++ b/media/liboggplay/src/liboggplay/oggplay_data.c @@ -157,7 +157,7 @@ oggplay_data_add_to_list (OggPlayDecode *decode, OggPlayDataHeader *data) { if (untimed->presentation_time >= decode->player->presentation_time) { oggplay_data_add_to_list_front(decode, untimed); } else { - oggplay_free(untimed); + free(untimed); } } @@ -188,7 +188,7 @@ oggplay_data_free_list(OggPlayDataHeader *list) { while (list != NULL) { p = list; list = list->next; - oggplay_free(p); + free(p); } } @@ -236,13 +236,13 @@ oggplay_data_clean_list (OggPlayDecode *decode) { decode->data_list = decode->data_list->next; if (decode->data_list == NULL) decode->end_of_data_list = NULL; - oggplay_free (header); + free (header); header = decode->data_list; } else { if (header->next == NULL) decode->end_of_data_list = p; p->next = header->next; - oggplay_free (header); + free (header); header = p->next; } } else { @@ -271,15 +271,12 @@ oggplay_data_handle_audio_data (OggPlayDecode *decode, void *data, int samples, int samplesize) { int num_channels; - OggPlayAudioRecord * record = NULL; + OggPlayAudioRecord * record; num_channels = ((OggPlayAudioDecode *)decode)->sound_info.channels; - record = (OggPlayAudioRecord*)oggplay_calloc(sizeof(OggPlayAudioRecord) + + record = (OggPlayAudioRecord*)calloc(sizeof(OggPlayAudioRecord) + samples * samplesize * num_channels, 1); - if (record == NULL) - return; - oggplay_data_initialise_header(decode, &(record->header)); record->header.samples_in_record = samples; @@ -298,14 +295,10 @@ void oggplay_data_handle_cmml_data(OggPlayDecode *decode, unsigned char *data, int size) { - OggPlayTextRecord * record = NULL; + OggPlayTextRecord * record; record = - (OggPlayTextRecord*)oggplay_calloc (sizeof(OggPlayTextRecord) + size + 1, 1); - - if (record == NULL) - return; - + (OggPlayTextRecord*)calloc (sizeof(OggPlayTextRecord) + size + 1, 1); oggplay_data_initialise_header(decode, &(record->header)); record->header.samples_in_record = 1; @@ -343,11 +336,7 @@ oggplay_data_handle_theora_frame (OggPlayTheoraDecode *decode, * we need to set the output strides to the input widths because we are * trying not to pass negative output stride issues on to the poor user. */ - record = (OggPlayVideoRecord*)oggplay_malloc (size); - - if (record == NULL) - return; - + record = (OggPlayVideoRecord*)malloc (size); record->header.samples_in_record = 1; data = &(record->data); oggplay_data_initialise_header((OggPlayDecode *)decode, &(record->header)); @@ -390,13 +379,9 @@ oggplay_data_handle_kate_data(OggPlayKateDecode *decode, const kate_event *ev) { // TODO: should be able to send the data rendered as YUV data, but just text for now - OggPlayTextRecord * record = NULL; - - record = (OggPlayTextRecord*)oggplay_calloc (sizeof(OggPlayTextRecord) + ev->len0, 1); - - if (record = NULL) - return; + OggPlayTextRecord * record; + record = (OggPlayTextRecord*)calloc (sizeof(OggPlayTextRecord) + ev->len0, 1); oggplay_data_initialise_header(&decode->decoder, &(record->header)); //record->header.presentation_time = (ogg_int64_t)(ev->start_time*1000); diff --git a/media/liboggplay/src/liboggplay/oggplay_file_reader.c b/media/liboggplay/src/liboggplay/oggplay_file_reader.c index 1ec0f426af3..789049ff12c 100644 --- a/media/liboggplay/src/liboggplay/oggplay_file_reader.c +++ b/media/liboggplay/src/liboggplay/oggplay_file_reader.c @@ -76,7 +76,7 @@ oggplay_file_reader_destroy(OggPlayReader * opr) { me = (OggPlayFileReader *)opr; fclose(me->file); - oggplay_free(me); + free(me); return E_OGGPLAY_OK; } @@ -135,10 +135,7 @@ oggplay_file_reader_io_tell(void * user_handle) { OggPlayReader * oggplay_file_reader_new(char *file_name) { - OggPlayFileReader * me = oggplay_malloc (sizeof (OggPlayFileReader)); - - if (me == NULL) - return NULL; + OggPlayFileReader * me = malloc (sizeof (OggPlayFileReader)); me->current_position = 0; me->file_name = file_name; diff --git a/media/liboggplay/src/liboggplay/oggplay_private.h b/media/liboggplay/src/liboggplay/oggplay_private.h index 7f79273cdf3..5fce21cc7c0 100644 --- a/media/liboggplay/src/liboggplay/oggplay_private.h +++ b/media/liboggplay/src/liboggplay/oggplay_private.h @@ -244,15 +244,47 @@ typedef struct { int size; } OggPlayCallbackFunctions; -/* Allocate and free dynamic memory used by ogg. - * By default they are the ones from stdlib */ -#define oggplay_malloc _ogg_malloc -#define oggplay_calloc _ogg_calloc -#define oggplay_realloc _ogg_realloc -#define oggplay_free _ogg_free - #include "oggplay_callback.h" #include "oggplay_data.h" #include "oggplay_buffer.h" +#if 0 +static inline void _free(void *x) { + printf("%p\n", x); + free(x); +} + +static inline void *_malloc(int s) { + void *x; + printf("%d ", s); + x = malloc(s); + printf("%p\n", x); + return x; +} + +static inline void *_realloc(void *x, int s) { + void *y; + printf("%p %d ", x, s); + y = realloc(x, s); + printf("%p\n", y); + return y; +} + +static inline void *_calloc(int n, int s) { + void *x; + printf("%d %d ", n, s); + x = calloc(n, s); + printf("%p\n", x); + return x; +} + +#define free(x) {printf("FREE %s %d ", __FILE__, __LINE__); _free(x);} +#define malloc(s) (printf("MALLOC %s %d ", __FILE__, __LINE__), \ + _malloc(s)) +#define realloc(x, s) (printf("REALLOC %s %d ", __FILE__, __LINE__), \ + _realloc(x, s)) +#define calloc(n, s) (printf("CALLOC %s %d ", __FILE__, __LINE__), \ + _calloc(n, s)) +#endif + #endif diff --git a/media/liboggplay/src/liboggplay/oggplay_seek.c b/media/liboggplay/src/liboggplay/oggplay_seek.c index f93552f07d8..415ce0fe24d 100644 --- a/media/liboggplay/src/liboggplay/oggplay_seek.c +++ b/media/liboggplay/src/liboggplay/oggplay_seek.c @@ -87,19 +87,13 @@ oggplay_seek_cleanup(OggPlay* me, ogg_int64_t milliseconds) OggPlayDataHeader ** end_of_list_p; int i; - if (me == NULL) - return; - /* * first, create a trash object to store the context that we want to * delete but can't until the presentation thread is no longer using it - * this will occur as soon as the thread calls oggplay_buffer_release_next */ - trash = oggplay_calloc(1, sizeof(OggPlaySeekTrash)); - - if (trash == NULL) - return; + trash = calloc(sizeof(OggPlaySeekTrash), 1); /* * store the old buffer in it next. @@ -112,11 +106,6 @@ oggplay_seek_cleanup(OggPlay* me, ogg_int64_t milliseconds) */ me->buffer = oggplay_buffer_new_buffer(me->buffer->buffer_size); - if (me->buffer == NULL) - { - return; - } - /* * strip all of the data packets out of the streams and put them into the * trash. We can free the untimed packets immediately - they are USELESS @@ -163,12 +152,12 @@ oggplay_take_out_trash(OggPlay *me, OggPlaySeekTrash *trash) { oggplay_buffer_shutdown(me, trash->old_buffer); oggplay_data_free_list(trash->old_data); if (p != NULL) { - oggplay_free(p); + free(p); } p = trash; } if (p != NULL) { - oggplay_free(p); + free(p); } } diff --git a/media/liboggplay/src/liboggplay/oggplay_tcp_reader.c b/media/liboggplay/src/liboggplay/oggplay_tcp_reader.c index 3becb6d0986..c2d55fb3b21 100644 --- a/media/liboggplay/src/liboggplay/oggplay_tcp_reader.c +++ b/media/liboggplay/src/liboggplay/oggplay_tcp_reader.c @@ -148,21 +148,13 @@ oggplay_create_socket() { return sock; } -/** - * This function guarantees it will return malloced versions of host and +/* + * this function guarantees it will return malloced versions of host and * path - * - * @param location Location of the Ogg content - * @param proxy The proxy if there's any. - * @param proxy_port The port of the proxy if there's any. - * @param host The host to connect to; using proxy if set. - * @param port The port to connect to; - * @param path The path where the content resides on the server. - * @retval -1 in case of error, 0 otherwise. */ -int +void oggplay_hostname_and_path(char *location, char *proxy, int proxy_port, - char **host, int *port, char **path) { + char **host, int *port, char **path) { char * colon; @@ -171,15 +163,10 @@ oggplay_hostname_and_path(char *location, char *proxy, int proxy_port, /* if we have a proxy installed this is all dead simple */ if (proxy != NULL) { - if ((*host = strdup(proxy)) == NULL) - goto error; - + *host = strdup(proxy); *port = proxy_port; - - if ((*path = strdup(location)) == NULL) - goto error; - - return 0; + *path = strdup(location); + return; } /* find start_pos */ @@ -194,15 +181,10 @@ oggplay_hostname_and_path(char *location, char *proxy, int proxy_port, * if both are null, then just set the simple defaults and return */ if (colon == NULL && slash == NULL) { - if ((*host = strdup(location)) == NULL) - goto error; - + *host = strdup(location); *port = 80; - - if ((*path = strdup("/")) == NULL) - goto error; - - return 0; + *path = strdup("/"); + return; } /* @@ -226,29 +208,16 @@ oggplay_hostname_and_path(char *location, char *proxy, int proxy_port, end_of_host = slash; } - if ((*host = strdup(location)) == NULL) - goto error; - + *host = strdup(location); (*host)[end_of_host - location] = '\0'; if (slash == NULL) { - if ((*path = strdup("/")) == NULL) - goto error; - - return 0; + *path = strdup("/"); + return; } - if ((*path = strdup(slash)) == NULL) - goto error; + *path = strdup(slash); - return 0; - -error: - /* there has been an error while copying strings... */ - if (*host != NULL) - oggplay_free(*host); - - return -1; } OggPlayErrorCode @@ -334,9 +303,8 @@ oggplay_tcp_reader_initialise(OggPlayReader * opr, int block) { /* * Extract the host name and the path from the location. */ - if (oggplay_hostname_and_path(me->location, me->proxy, me->proxy_port, - &host, &port, &path) != 0) - return E_OGGPLAY_OUT_OF_MEMORY; + oggplay_hostname_and_path(me->location, me->proxy, me->proxy_port, + &host, &port, &path); /* @@ -352,8 +320,8 @@ oggplay_tcp_reader_initialise(OggPlayReader * opr, int block) { he = gethostbyname(host); - oggplay_free(host); - oggplay_free(path); + free(host); + free(path); if (he == NULL) { printf("Host not found\n"); @@ -406,10 +374,7 @@ oggplay_tcp_reader_initialise(OggPlayReader * opr, int block) { int found_http_response = 0; if (me->buffer == NULL) { - me->buffer = (unsigned char*)oggplay_malloc(TCP_READER_MAX_IN_MEMORY); - if (me->buffer == NULL) - return E_OGGPLAY_OUT_OF_MEMORY; - + me->buffer = (unsigned char*)malloc(TCP_READER_MAX_IN_MEMORY); me->buffer_size = TCP_READER_MAX_IN_MEMORY; me->amount_in_memory = 0; } @@ -549,12 +514,12 @@ oggplay_tcp_reader_destroy(OggPlayReader * opr) { #endif } - if (me->buffer != NULL) oggplay_free(me->buffer); - if (me->location != NULL) oggplay_free(me->location); + free(me->buffer); + free(me->location); if (me->backing_store != NULL) { fclose(me->backing_store); } - oggplay_free(me); + free(me); return E_OGGPLAY_OK; } @@ -696,22 +661,14 @@ oggplay_tcp_reader_io_tell(void * user_handle) { OggPlayReader * oggplay_tcp_reader_new(char *location, char *proxy, int proxy_port) { - OggPlayTCPReader * me = (OggPlayTCPReader *)oggplay_malloc (sizeof (OggPlayTCPReader)); - - if (me == NULL) - return NULL; + OggPlayTCPReader * me = (OggPlayTCPReader *)malloc (sizeof (OggPlayTCPReader)); me->state = OTRS_UNINITIALISED; me->socket = INVALID_SOCKET; me->buffer = NULL; me->buffer_size = 0; me->current_position = 0; - /* if there's not enough memory to copy the URI cancel the initialisation */ - if ( (me->location = strdup(location)) == NULL) - { - oggplay_tcp_reader_destroy ((OggPlayReader*)me); - return NULL; - } + me->location = strdup(location); me->amount_in_memory = 0; me->backing_store = NULL; me->stored_offset = 0; diff --git a/media/liboggplay/update.sh b/media/liboggplay/update.sh index 9e09094b714..929875bcae5 100644 --- a/media/liboggplay/update.sh +++ b/media/liboggplay/update.sh @@ -38,5 +38,4 @@ cd ./src/liboggplay patch <../../yuv_disable_optimized.patch cd ../.. patch -p3