summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavformat/avformat.h2
-rw-r--r--libavformat/format.c10
2 files changed, 8 insertions, 4 deletions
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index 923b282d41..f28186f7c7 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -396,7 +396,7 @@ typedef struct AVProbeData {
const char *filename;
unsigned char *buf; /**< Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero. */
int buf_size; /**< Size of buf except extra allocated bytes */
- uint8_t *mime_type; /**< mime_type, when known. */
+ const char *mime_type; /**< mime_type, when known. */
} AVProbeData;
#define AVPROBE_SCORE_EXTENSION 50 ///< score for file extension
diff --git a/libavformat/format.c b/libavformat/format.c
index 11f9a52280..24b7205d44 100644
--- a/libavformat/format.c
+++ b/libavformat/format.c
@@ -242,6 +242,7 @@ int av_probe_input_buffer(AVIOContext *pb, AVInputFormat **fmt,
AVProbeData pd = { filename ? filename : "" };
uint8_t *buf = NULL;
int ret = 0, probe_size;
+ uint8_t *mime_type_opt = NULL;
if (!max_probe_size)
max_probe_size = PROBE_BUF_MAX;
@@ -254,8 +255,11 @@ int av_probe_input_buffer(AVIOContext *pb, AVInputFormat **fmt,
return AVERROR(EINVAL);
avio_skip(pb, offset);
max_probe_size -= offset;
- if (pb->av_class)
- av_opt_get(pb, "mime_type", AV_OPT_SEARCH_CHILDREN, &pd.mime_type);
+ if (pb->av_class) {
+ av_opt_get(pb, "mime_type", AV_OPT_SEARCH_CHILDREN, &mime_type_opt);
+ pd.mime_type = (const char *)mime_type_opt;
+ mime_type_opt = NULL;
+ }
for (probe_size = PROBE_BUF_MIN; probe_size <= max_probe_size && !*fmt;
probe_size = FFMIN(probe_size << 1,
FFMAX(max_probe_size, probe_size + 1))) {
@@ -301,6 +305,6 @@ fail:
(ret = ffio_rewind_with_probe_data(pb, buf, pd.buf_size)) < 0) {
av_free(buf);
}
- av_free(pd.mime_type);
+ av_freep(&pd.mime_type);
return ret;
}