[Cvs-annodex] commit (annodex):
liboggplay/trunk/src/liboggplay/Version_script.in
liboggplay/trunk/src/liboggplay/oggplay.c
liboggplay/trunk/src/liboggplay/oggplay_buffer.c
liboggplay/trunk/src/liboggplay/oggplay_callback_info.c
liboggplay/trunk/src/liboggplay/oggplay_data.c
shans
nobody at lists.annodex.net
Thu Oct 26 10:45:22 UTC 2006
Update of /var/local/lib/svn/annodex (new revision 2537)
Modified files:
liboggplay/trunk/src/liboggplay/Version_script.in
liboggplay/trunk/src/liboggplay/oggplay.c
liboggplay/trunk/src/liboggplay/oggplay_buffer.c
liboggplay/trunk/src/liboggplay/oggplay_callback_info.c
liboggplay/trunk/src/liboggplay/oggplay_data.c
Log Message:
Fixed memory problems in lock-free buffer
Modified: liboggplay/trunk/src/liboggplay/Version_script.in
===================================================================
--- liboggplay/trunk/src/liboggplay/Version_script.in 2006-10-24 08:04:25 UTC (rev 2536)
+++ liboggplay/trunk/src/liboggplay/Version_script.in 2006-10-26 10:45:20 UTC (rev 2537)
@@ -37,7 +37,7 @@
oggplay_buffer_retrieve_next;
oggplay_buffer_release_next;
- oggplay_usr_buffer;
+ oggplay_use_buffer;
oggplay_callback_info_lock_item;
oggplay_callback_info_unlock_item;
Modified: liboggplay/trunk/src/liboggplay/oggplay.c
===================================================================
--- liboggplay/trunk/src/liboggplay/oggplay.c 2006-10-24 08:04:25 UTC (rev 2536)
+++ liboggplay/trunk/src/liboggplay/oggplay.c 2006-10-26 10:45:20 UTC (rev 2537)
@@ -64,6 +64,7 @@
me->reader = reader;
me->input_name = filename;
me->decode_data = NULL;
+ me->callback_info = NULL;
me->num_tracks = 0;
me->all_tracks_initialised = 0;
me->callback_period = 0;
Modified: liboggplay/trunk/src/liboggplay/oggplay_buffer.c
===================================================================
--- liboggplay/trunk/src/liboggplay/oggplay_buffer.c 2006-10-24 08:04:25 UTC (rev 2536)
+++ liboggplay/trunk/src/liboggplay/oggplay_buffer.c 2006-10-26 10:45:20 UTC (rev 2537)
@@ -66,7 +66,7 @@
/*
* replace the decode_data buffer for the next callback
*/
- me->callback_info = malloc(me->num_tracks * sizeof (OggPlayCallbackInfo));
+ me->callback_info = calloc(me->num_tracks, sizeof (OggPlayCallbackInfo));
/*
* fill both mirror and list, mirror first to avoid getting inconsistencies
@@ -74,14 +74,22 @@
buffer->last_filled = WRAP_INC(buffer->last_filled, buffer->buffer_size);
+ printf("BUFFER insert %p\n", ptr);
+
buffer->buffer_mirror[buffer->last_filled] = ptr;
buffer->buffer_list[buffer->last_filled] = ptr;
+
/*
* check for and clean up empties
*/
- for (k = 0; i < buffer->buffer_size; k++) {
- if (buffer->buffer_list[k] == NULL && buffer->buffer_mirror[k] != NULL) {
+ for (k = 0; k < buffer->buffer_size; k++) {
+ if
+ (
+ (buffer->buffer_list[k] == NULL)
+ &&
+ (buffer->buffer_mirror[k] != NULL)
+ ) {
OggPlayCallbackInfo *ti = (OggPlayCallbackInfo *)buffer->buffer_mirror[k];
for (i = 0; i < tracks; i++) {
headers = oggplay_callback_info_get_headers(ti + i);
@@ -89,8 +97,13 @@
for (j = 0; j < required; j++) {
oggplay_callback_info_unlock_item(headers[j]);
}
+ /* free these here, because we couldn't free them in
+ * oggplay_callback_info_destroy for buffer mode
+ */
+ free((ti + i)->records);
}
free(ti);
+ buffer->buffer_mirror[k] = NULL;
}
}
@@ -141,6 +154,8 @@
return_val[i] = next_item + i;
}
+ printf("BUFFER retrieve %p\n", next_item);
+
return return_val;
}
@@ -164,7 +179,6 @@
return E_OGGPLAY_UNINITIALISED;
}
- free(me);
buffer->buffer_list[buffer->last_emptied] = NULL;
return E_OGGPLAY_OK;
@@ -190,9 +204,10 @@
return E_OGGPLAY_OK;
}
+
+ oggplay_set_data_callback(me, &oggplay_buffer_callback, NULL);
me->buffer = oggplay_buffer_new_buffer(size);
- oggplay_set_data_callback(me, oggplay_buffer_callback, NULL);
for (i = 0; i < me->num_tracks; i++) {
if (oggplay_get_track_type(me, i) == OGGZ_CONTENT_THEORA) {
oggplay_set_callback_num_frames(me, i, 1);
Modified: liboggplay/trunk/src/liboggplay/oggplay_callback_info.c
===================================================================
--- liboggplay/trunk/src/liboggplay/oggplay_callback_info.c 2006-10-24 08:04:25 UTC (rev 2536)
+++ liboggplay/trunk/src/liboggplay/oggplay_callback_info.c 2006-10-26 10:45:20 UTC (rev 2537)
@@ -56,6 +56,7 @@
OggPlayCallbackInfo * track_info = me->callback_info + i;
int count = 0;
OggPlayDataHeader * p;
+ OggPlayDataHeader * q = NULL;
(*info)[i] = track_info;
@@ -65,9 +66,15 @@
track_info->records = NULL;
continue;
}
-
+
for (p = track->data_list; p != NULL; p = p->next) {
- count++;
+ if (p->presentation_time >= (me->target - me->callback_period)) {
+ if (q == NULL) {
+ q = p;
+ }
+ printf("%llx ", p->presentation_time);
+ count++;
+ }
}
track_info->records = malloc (count * sizeof (OggPlayDataHeader *));
@@ -77,12 +84,14 @@
track_info->data_type = track->decoded_type;
count = 0;
- for (p = track->data_list; p != NULL; p = p->next) {
+ for (p = q; p != NULL; p = p->next) {
track_info->records[count++] = p;
if (p->presentation_time <= me->target) {
track_info->required_records++;
}
}
+
+ printf("%d\n", track_info->required_records);
}
@@ -99,7 +108,7 @@
for (i = 0; i < me->num_tracks; i++) {
p = info[i];
- if (p->records != NULL)
+ if (me->buffer == NULL && p->records != NULL)
free(p->records);
}
@@ -168,6 +177,8 @@
if (header == NULL) {
return;
}
+
+ printf("DATA lock %p %llx\n", header, header->presentation_time);
header->lock = 2;
@@ -180,6 +191,8 @@
return;
}
+ printf("DATA unlock %p\n", header);
+
header->lock = 1;
}
Modified: liboggplay/trunk/src/liboggplay/oggplay_data.c
===================================================================
--- liboggplay/trunk/src/liboggplay/oggplay_data.c 2006-10-24 08:04:25 UTC (rev 2536)
+++ liboggplay/trunk/src/liboggplay/oggplay_data.c 2006-10-26 10:45:20 UTC (rev 2537)
@@ -67,6 +67,8 @@
oggplay_data_add_to_list (OggPlayDecode *decode, OggPlayDataHeader *data) {
data->next = NULL;
+
+ printf("DATA add %p %llx\n", data, data->presentation_time);
if (decode->end_of_data_list == NULL) {
decode->data_list = data;
@@ -106,6 +108,7 @@
if (header->next == NULL)
decode->end_of_data_list = p;
p->next = header->next;
+ printf("DATA free %p\n", header);
free (header);
header = p->next;
}
--
shans
More information about the cvs-annodex
mailing list