diff options
author | Max Kellermann <max@duempel.org> | 2008-11-04 16:55:12 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2008-11-04 16:55:12 +0100 |
commit | 02a172f2c2262585dacf71dc4a54e7f870e55d14 (patch) | |
tree | 5aad1b85a3b10e24ff966b7d8cdd3846a596303b /src/decoder/mp4_plugin.c | |
parent | 8712a1f7bf7f38bfdf93db9545497a81e1f9f0cf (diff) | |
download | mpd-02a172f2c2262585dacf71dc4a54e7f870e55d14.tar.gz mpd-02a172f2c2262585dacf71dc4a54e7f870e55d14.tar.xz mpd-02a172f2c2262585dacf71dc4a54e7f870e55d14.zip |
mp4: static mp4ff_callback_t variables
Allocate the mp4ff_callback_t object on the stack. This is easier to
handle, since we don't have to free it. Incidentally, this fixes a
memory leak in mp4_load_tag().
Diffstat (limited to '')
-rw-r--r-- | src/decoder/mp4_plugin.c | 37 |
1 files changed, 15 insertions, 22 deletions
diff --git a/src/decoder/mp4_plugin.c b/src/decoder/mp4_plugin.c index 3a7188439..934ffc59b 100644 --- a/src/decoder/mp4_plugin.c +++ b/src/decoder/mp4_plugin.c @@ -84,8 +84,12 @@ mp4_seek(void *user_data, uint64_t position) static bool mp4_decode(struct decoder *mpd_decoder, struct input_stream *input_stream) { + mp4ff_callback_t callback = { + .read = mp4_read, + .seek = mp4_seek, + .user_data = input_stream, + }; mp4ff_t *mp4fh; - mp4ff_callback_t *mp4cb; int32_t track; float file_time, total_time; int32_t scale; @@ -113,15 +117,13 @@ mp4_decode(struct decoder *mpd_decoder, struct input_stream *input_stream) double seek_where = 0; bool initialized = false; - mp4cb = xmalloc(sizeof(mp4ff_callback_t)); - mp4cb->read = mp4_read; - mp4cb->seek = mp4_seek; - mp4cb->user_data = input_stream; + callback.read = mp4_read; + callback.seek = mp4_seek; + callback.user_data = input_stream; - mp4fh = mp4ff_open_read(mp4cb); + mp4fh = mp4ff_open_read(&callback); if (!mp4fh) { ERROR("Input does not appear to be a mp4 stream.\n"); - free(mp4cb); return false; } @@ -129,7 +131,6 @@ mp4_decode(struct decoder *mpd_decoder, struct input_stream *input_stream) if (track < 0) { ERROR("No AAC track found in mp4 stream.\n"); mp4ff_close(mp4fh); - free(mp4cb); return false; } @@ -156,7 +157,6 @@ mp4_decode(struct decoder *mpd_decoder, struct input_stream *input_stream) ERROR("Error not a AAC stream.\n"); faacDecClose(decoder); mp4ff_close(mp4fh); - free(mp4cb); return false; } @@ -172,7 +172,6 @@ mp4_decode(struct decoder *mpd_decoder, struct input_stream *input_stream) ERROR("Error getting audio format of mp4 AAC track.\n"); faacDecClose(decoder); mp4ff_close(mp4fh); - free(mp4cb); return false; } total_time = ((float)file_time) / scale; @@ -182,7 +181,6 @@ mp4_decode(struct decoder *mpd_decoder, struct input_stream *input_stream) ERROR("Integer overflow.\n"); faacDecClose(decoder); mp4ff_close(mp4fh); - free(mp4cb); return false; } @@ -293,7 +291,6 @@ mp4_decode(struct decoder *mpd_decoder, struct input_stream *input_stream) free(seek_table); faacDecClose(decoder); mp4ff_close(mp4fh); - free(mp4cb); if (!initialized) return false; @@ -309,8 +306,12 @@ mp4_load_tag(const char *file, int *tag_found) { struct tag *ret = NULL; struct input_stream input_stream; + mp4ff_callback_t callback = { + .read = mp4_read, + .seek = mp4_seek, + .user_data = &input_stream, + }; mp4ff_t *mp4fh; - mp4ff_callback_t *callback; int32_t track; int32_t file_time; int32_t scale; @@ -323,14 +324,8 @@ mp4_load_tag(const char *file, int *tag_found) return NULL; } - callback = xmalloc(sizeof(mp4ff_callback_t)); - callback->read = mp4_read; - callback->seek = mp4_seek; - callback->user_data = &input_stream; - - mp4fh = mp4ff_open_read(callback); + mp4fh = mp4ff_open_read(&callback); if (!mp4fh) { - free(callback); input_stream_close(&input_stream); return NULL; } @@ -339,7 +334,6 @@ mp4_load_tag(const char *file, int *tag_found) if (track < 0) { mp4ff_close(mp4fh); input_stream_close(&input_stream); - free(callback); return NULL; } @@ -349,7 +343,6 @@ mp4_load_tag(const char *file, int *tag_found) if (scale < 0) { mp4ff_close(mp4fh); input_stream_close(&input_stream); - free(callback); tag_free(ret); return NULL; } |