Commit 905e7eb4 authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit 'f099d3d1'

* commit 'f099d3d1':
  Add av_log_{ask_for_sample|missing_feature} replacements to libavutil
  ismindex: Check the return value of allocations
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents 360d7170 f099d3d1
...@@ -4569,6 +4569,7 @@ void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size); ...@@ -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); 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 * Log a generic warning message about a missing feature. This function is
* intended to be used internally by FFmpeg (libavcodec, libavformat, etc.) * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.)
...@@ -4580,7 +4581,9 @@ unsigned int av_xiphlacing(unsigned char *s, unsigned int v); ...@@ -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 * 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 * message which tells the user how to report samples to the development
* mailing list. * mailing list.
* @deprecated Use avpriv_report_missing_feature() instead.
*/ */
attribute_deprecated
void av_log_missing_feature(void *avc, const char *feature, int want_sample); 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); ...@@ -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 * @param[in] avc a pointer to an arbitrary struct of which the first field is
* a pointer to an AVClass struct * a pointer to an AVClass struct
* @param[in] msg string containing an optional message, or NULL if no message * @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); 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. * Register the hardware accelerator hwaccel.
......
...@@ -45,6 +45,7 @@ ...@@ -45,6 +45,7 @@
#include "frame_thread_encoder.h" #include "frame_thread_encoder.h"
#include "internal.h" #include "internal.h"
#include "bytestream.h" #include "bytestream.h"
#include "version.h"
#include <stdlib.h> #include <stdlib.h>
#include <stdarg.h> #include <stdarg.h>
#include <limits.h> #include <limits.h>
...@@ -2859,6 +2860,7 @@ int ff_match_2uint16(const uint16_t(*tab)[2], int size, int a, int b) ...@@ -2859,6 +2860,7 @@ int ff_match_2uint16(const uint16_t(*tab)[2], int size, int a, int b)
return i; return i;
} }
#if FF_API_MISSING_SAMPLE
void av_log_missing_feature(void *avc, const char *feature, int want_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 " 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, ...) ...@@ -2883,6 +2885,7 @@ void av_log_ask_for_sample(void *avc, const char *msg, ...)
va_end(argument_list); va_end(argument_list);
} }
#endif /* FF_API_MISSING_SAMPLE */
static AVHWAccel *first_hwaccel = NULL; static AVHWAccel *first_hwaccel = NULL;
......
...@@ -85,5 +85,8 @@ ...@@ -85,5 +85,8 @@
#ifndef FF_API_GET_BUFFER #ifndef FF_API_GET_BUFFER
#define FF_API_GET_BUFFER (LIBAVCODEC_VERSION_MAJOR < 56) #define FF_API_GET_BUFFER (LIBAVCODEC_VERSION_MAJOR < 56)
#endif #endif
#ifndef FF_API_MISSING_SAMPLE
#define FF_API_MISSING_SAMPLE (LIBAVCODEC_VERSION_MAJOR < 56)
#endif
#endif /* AVCODEC_VERSION_H */ #endif /* AVCODEC_VERSION_H */
...@@ -162,4 +162,25 @@ ...@@ -162,4 +162,25 @@
# define ONLY_IF_THREADS_ENABLED(x) NULL # define ONLY_IF_THREADS_ENABLED(x) NULL
#endif #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 */ #endif /* AVUTIL_INTERNAL_H */
...@@ -32,9 +32,11 @@ ...@@ -32,9 +32,11 @@
#if HAVE_IO_H #if HAVE_IO_H
#include <io.h> #include <io.h>
#endif #endif
#include <stdarg.h>
#include <stdlib.h> #include <stdlib.h>
#include "avutil.h" #include "avutil.h"
#include "common.h" #include "common.h"
#include "internal.h"
#include "log.h" #include "log.h"
#define LINE_SZ 1024 #define LINE_SZ 1024
...@@ -278,3 +280,40 @@ void av_log_set_callback(void (*callback)(void*, int, const char*, va_list)) ...@@ -278,3 +280,40 @@ void av_log_set_callback(void (*callback)(void*, int, const char*, va_list))
{ {
av_log_callback = callback; 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);
}
...@@ -305,10 +305,21 @@ static int handle_file(struct Tracks *tracks, const char *file, int split) ...@@ -305,10 +305,21 @@ static int handle_file(struct Tracks *tracks, const char *file, int split)
tracks->duration = ctx->duration; tracks->duration = ctx->duration;
for (i = 0; i < ctx->nb_streams; i++) { for (i = 0; i < ctx->nb_streams; i++) {
struct Track **temp;
AVStream *st = ctx->streams[i]; AVStream *st = ctx->streams[i];
track = av_mallocz(sizeof(*track)); track = av_mallocz(sizeof(*track));
tracks->tracks = av_realloc(tracks->tracks, if (!track) {
err = AVERROR(ENOMEM);
goto fail;
}
temp = av_realloc(tracks->tracks,
sizeof(*tracks->tracks) * (tracks->nb_tracks + 1)); 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; tracks->tracks[tracks->nb_tracks] = track;
track->name = file; track->name = file;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment