Originally committed as revision 22174 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.6
@@ -12,6 +12,9 @@ libavutil: 2009-03-08 | |||||
API changes, most recent first: | API changes, most recent first: | ||||
2010-03-03 - r22174 - lavu 50.10.0 - av_tree_enumerate() | |||||
Add av_tree_enumerate(). | |||||
2010-02-07 - r21673 - lavu 50.9.0 - av_compare_ts() | 2010-02-07 - r21673 - lavu 50.9.0 - av_compare_ts() | ||||
Add av_compare_ts(). | Add av_compare_ts(). | ||||
@@ -69,6 +69,17 @@ void ff_nut_add_sp(NUTContext *nut, int64_t pos, int64_t back_ptr, int64_t ts){ | |||||
} | } | ||||
} | } | ||||
static void enu_free(void *opaque, void *elem) | |||||
{ | |||||
av_free(elem); | |||||
} | |||||
void ff_nut_free_sp(NUTContext *nut) | |||||
{ | |||||
av_tree_enumerate(nut->syncpoints, NULL, NULL, enu_free); | |||||
av_tree_destroy(nut->syncpoints); | |||||
} | |||||
const Dispositions ff_nut_dispositions[] = { | const Dispositions ff_nut_dispositions[] = { | ||||
{"default" , AV_DISPOSITION_DEFAULT}, | {"default" , AV_DISPOSITION_DEFAULT}, | ||||
{"dub" , AV_DISPOSITION_DUB}, | {"dub" , AV_DISPOSITION_DUB}, | ||||
@@ -110,6 +110,7 @@ int64_t ff_lsb2full(StreamContext *stream, int64_t lsb); | |||||
int ff_nut_sp_pos_cmp(Syncpoint *a, Syncpoint *b); | int ff_nut_sp_pos_cmp(Syncpoint *a, Syncpoint *b); | ||||
int ff_nut_sp_pts_cmp(Syncpoint *a, Syncpoint *b); | int ff_nut_sp_pts_cmp(Syncpoint *a, Syncpoint *b); | ||||
void ff_nut_add_sp(NUTContext *nut, int64_t pos, int64_t back_ptr, int64_t ts); | void ff_nut_add_sp(NUTContext *nut, int64_t pos, int64_t back_ptr, int64_t ts); | ||||
void ff_nut_free_sp(NUTContext *nut); | |||||
extern const Dispositions ff_nut_dispositions[]; | extern const Dispositions ff_nut_dispositions[]; | ||||
@@ -901,6 +901,7 @@ static int nut_read_close(AVFormatContext *s) | |||||
av_freep(&nut->time_base); | av_freep(&nut->time_base); | ||||
av_freep(&nut->stream); | av_freep(&nut->stream); | ||||
ff_nut_free_sp(nut); | |||||
for(i = 1; i < nut->header_count; i++) | for(i = 1; i < nut->header_count; i++) | ||||
av_freep(&nut->header[i]); | av_freep(&nut->header[i]); | ||||
@@ -797,6 +797,7 @@ static int write_trailer(AVFormatContext *s){ | |||||
while(nut->header_count<3) | while(nut->header_count<3) | ||||
write_headers(nut, bc); | write_headers(nut, bc); | ||||
put_flush_packet(bc); | put_flush_packet(bc); | ||||
ff_nut_free_sp(nut); | |||||
av_freep(&nut->stream); | av_freep(&nut->stream); | ||||
av_freep(&nut->time_base); | av_freep(&nut->time_base); | ||||
@@ -40,7 +40,7 @@ | |||||
#define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) | #define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) | ||||
#define LIBAVUTIL_VERSION_MAJOR 50 | #define LIBAVUTIL_VERSION_MAJOR 50 | ||||
#define LIBAVUTIL_VERSION_MINOR 9 | |||||
#define LIBAVUTIL_VERSION_MINOR 10 | |||||
#define LIBAVUTIL_VERSION_MICRO 0 | #define LIBAVUTIL_VERSION_MICRO 0 | ||||
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | ||||
@@ -135,7 +135,6 @@ void av_tree_destroy(AVTreeNode *t){ | |||||
} | } | ||||
} | } | ||||
#if 0 | |||||
void av_tree_enumerate(AVTreeNode *t, void *opaque, int (*cmp)(void *opaque, void *elem), int (*enu)(void *opaque, void *elem)){ | void av_tree_enumerate(AVTreeNode *t, void *opaque, int (*cmp)(void *opaque, void *elem), int (*enu)(void *opaque, void *elem)){ | ||||
if(t){ | if(t){ | ||||
int v= cmp ? cmp(opaque, t->elem) : 0; | int v= cmp ? cmp(opaque, t->elem) : 0; | ||||
@@ -144,7 +143,6 @@ void av_tree_enumerate(AVTreeNode *t, void *opaque, int (*cmp)(void *opaque, voi | |||||
if(v<=0) av_tree_enumerate(t->child[1], opaque, cmp, enu); | if(v<=0) av_tree_enumerate(t->child[1], opaque, cmp, enu); | ||||
} | } | ||||
} | } | ||||
#endif | |||||
#ifdef TEST | #ifdef TEST | ||||
@@ -79,4 +79,17 @@ void *av_tree_find(const struct AVTreeNode *root, void *key, int (*cmp)(void *ke | |||||
void *av_tree_insert(struct AVTreeNode **rootp, void *key, int (*cmp)(void *key, const void *b), struct AVTreeNode **next); | void *av_tree_insert(struct AVTreeNode **rootp, void *key, int (*cmp)(void *key, const void *b), struct AVTreeNode **next); | ||||
void av_tree_destroy(struct AVTreeNode *t); | void av_tree_destroy(struct AVTreeNode *t); | ||||
/** | |||||
* Applies enu(opaque, &elem) to all the elements in the tree in a given range. | |||||
* | |||||
* @param cmp a comparison function that returns < 0 for a element below the | |||||
* range, > 0 for a element above the range and == 0 for a | |||||
* element inside the range | |||||
* | |||||
* @note The cmp function should use the same ordering used to construct the | |||||
* tree. | |||||
*/ | |||||
void av_tree_enumerate(struct AVTreeNode *t, void *opaque, int (*cmp)(void *opaque, void *elem), int (*enu)(void *opaque, void *elem)); | |||||
#endif /* AVUTIL_TREE_H */ | #endif /* AVUTIL_TREE_H */ |