diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-03-14 12:02:43 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-03-14 12:15:02 +0100 |
commit | 905e7eb41389e4394e9c6e459b7d1a99dc30b075 (patch) | |
tree | 1d182a4e747144648ab74c4a7dfcc88395aa7c29 | |
parent | 360d71707f7d3b1c02be857515392a843f159b85 (diff) | |
parent | f099d3d1d5466bd63f4ab36270d169ff9ea613b8 (diff) | |
download | ffmpeg-905e7eb41389e4394e9c6e459b7d1a99dc30b075.tar.gz |
Merge commit 'f099d3d1d5466bd63f4ab36270d169ff9ea613b8'
* commit 'f099d3d1d5466bd63f4ab36270d169ff9ea613b8':
Add av_log_{ask_for_sample|missing_feature} replacements to libavutil
ismindex: Check the return value of allocations
Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavcodec/avcodec.h | 6 | ||||
-rw-r--r-- | libavcodec/utils.c | 3 | ||||
-rw-r--r-- | libavcodec/version.h | 3 | ||||
-rw-r--r-- | libavutil/internal.h | 21 | ||||
-rw-r--r-- | libavutil/log.c | 39 | ||||
-rw-r--r-- | tools/ismindex.c | 15 |
6 files changed, 85 insertions, 2 deletions
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index a46a8d6cfd..cbb64569c7 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -4569,6 +4569,7 @@ void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size); */ unsigned int av_xiphlacing(unsigned char *s, unsigned int v); +#if FF_API_MISSING_SAMPLE /** * Log a generic warning message about a missing feature. This function is * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.) @@ -4580,7 +4581,9 @@ unsigned int av_xiphlacing(unsigned char *s, unsigned int v); * If want_sample is non-zero, additional verbage will be added to the log * message which tells the user how to report samples to the development * mailing list. + * @deprecated Use avpriv_report_missing_feature() instead. */ +attribute_deprecated void av_log_missing_feature(void *avc, const char *feature, int want_sample); /** @@ -4590,8 +4593,11 @@ void av_log_missing_feature(void *avc, const char *feature, int want_sample); * @param[in] avc a pointer to an arbitrary struct of which the first field is * a pointer to an AVClass struct * @param[in] msg string containing an optional message, or NULL if no message + * @deprecated Use avpriv_request_sample() instead. */ +attribute_deprecated void av_log_ask_for_sample(void *avc, const char *msg, ...) av_printf_format(2, 3); +#endif /* FF_API_MISSING_SAMPLE */ /** * Register the hardware accelerator hwaccel. diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 46fc71095e..64d2e7e16e 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -45,6 +45,7 @@ #include "frame_thread_encoder.h" #include "internal.h" #include "bytestream.h" +#include "version.h" #include <stdlib.h> #include <stdarg.h> #include <limits.h> @@ -2859,6 +2860,7 @@ int ff_match_2uint16(const uint16_t(*tab)[2], int size, int a, int b) return i; } +#if FF_API_MISSING_SAMPLE void av_log_missing_feature(void *avc, const char *feature, int want_sample) { av_log(avc, AV_LOG_WARNING, "%s is not implemented. Update your FFmpeg " @@ -2883,6 +2885,7 @@ void av_log_ask_for_sample(void *avc, const char *msg, ...) va_end(argument_list); } +#endif /* FF_API_MISSING_SAMPLE */ static AVHWAccel *first_hwaccel = NULL; diff --git a/libavcodec/version.h b/libavcodec/version.h index 0a2a9094f5..256a2e5500 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -85,5 +85,8 @@ #ifndef FF_API_GET_BUFFER #define FF_API_GET_BUFFER (LIBAVCODEC_VERSION_MAJOR < 56) #endif +#ifndef FF_API_MISSING_SAMPLE +#define FF_API_MISSING_SAMPLE (LIBAVCODEC_VERSION_MAJOR < 56) +#endif #endif /* AVCODEC_VERSION_H */ diff --git a/libavutil/internal.h b/libavutil/internal.h index a105fe6b44..6ff14facb5 100644 --- a/libavutil/internal.h +++ b/libavutil/internal.h @@ -162,4 +162,25 @@ # define ONLY_IF_THREADS_ENABLED(x) NULL #endif +/** + * Log a generic warning message about a missing feature. + * + * @param[in] avc a pointer to an arbitrary struct of which the first + * field is a pointer to an AVClass struct + * @param[in] msg string containing the name of the missing feature + */ +void avpriv_report_missing_feature(void *avc, + const char *msg, ...) av_printf_format(2, 3); + +/** + * Log a generic warning message about a missing feature. + * Additionally request that a sample showcasing the feature be uploaded. + * + * @param[in] avc a pointer to an arbitrary struct of which the first field is + * a pointer to an AVClass struct + * @param[in] msg string containing the name of the missing feature + */ +void avpriv_request_sample(void *avc, + const char *msg, ...) av_printf_format(2, 3); + #endif /* AVUTIL_INTERNAL_H */ diff --git a/libavutil/log.c b/libavutil/log.c index 700e89fa97..a27413444d 100644 --- a/libavutil/log.c +++ b/libavutil/log.c @@ -32,9 +32,11 @@ #if HAVE_IO_H #include <io.h> #endif +#include <stdarg.h> #include <stdlib.h> #include "avutil.h" #include "common.h" +#include "internal.h" #include "log.h" #define LINE_SZ 1024 @@ -278,3 +280,40 @@ void av_log_set_callback(void (*callback)(void*, int, const char*, va_list)) { av_log_callback = callback; } + +static void missing_feature_sample(int sample, void *avc, const char *msg, ...) +{ + va_list argument_list; + + va_start(argument_list, msg); + + av_vlog(avc, AV_LOG_WARNING, msg, argument_list); + av_log(avc, AV_LOG_WARNING, " is not implemented. Update your FFmpeg " + "version to the newest one from Git. If the problem still " + "occurs, it means that your file has a feature which has not " + "been implemented.\n"); + if (sample) + av_log(avc, AV_LOG_WARNING, "If you want to help, upload a sample " + "of this file to ftp://upload.ffmpeg.org/MPlayer/incoming/ " + "and contact the ffmpeg-devel mailing list.\n"); + + va_end(argument_list); +} + +void avpriv_request_sample(void *avc, const char *msg, ...) +{ + va_list argument_list; + + va_start(argument_list, msg); + missing_feature_sample(1, avc, msg, argument_list); + va_end(argument_list); +} + +void avpriv_report_missing_feature(void *avc, const char *msg, ...) +{ + va_list argument_list; + + va_start(argument_list, msg); + missing_feature_sample(0, avc, msg, argument_list); + va_end(argument_list); +} diff --git a/tools/ismindex.c b/tools/ismindex.c index 540aca2c68..502a7dc2b1 100644 --- a/tools/ismindex.c +++ b/tools/ismindex.c @@ -305,10 +305,21 @@ static int handle_file(struct Tracks *tracks, const char *file, int split) tracks->duration = ctx->duration; for (i = 0; i < ctx->nb_streams; i++) { + struct Track **temp; AVStream *st = ctx->streams[i]; track = av_mallocz(sizeof(*track)); - tracks->tracks = av_realloc(tracks->tracks, - sizeof(*tracks->tracks) * (tracks->nb_tracks + 1)); + if (!track) { + err = AVERROR(ENOMEM); + goto fail; + } + temp = av_realloc(tracks->tracks, + sizeof(*tracks->tracks) * (tracks->nb_tracks + 1)); + if (!temp) { + av_free(track); + err = AVERROR(ENOMEM); + goto fail; + } + tracks->tracks = temp; tracks->tracks[tracks->nb_tracks] = track; track->name = file; |