summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/demuxers.texi11
-rw-r--r--doc/filters.texi9
-rw-r--r--libavformat/img2.h1
-rw-r--r--libavformat/img2dec.c39
-rw-r--r--libavformat/version.h2
5 files changed, 61 insertions, 1 deletions
diff --git a/doc/demuxers.texi b/doc/demuxers.texi
index 0d13bdd1b3..2de14b68d3 100644
--- a/doc/demuxers.texi
+++ b/doc/demuxers.texi
@@ -456,6 +456,17 @@ nanosecond precision.
@item video_size
Set the video size of the images to read. If not specified the video
size is guessed from the first image file in the sequence.
+@item export_path_metadata
+If set to 1, will add two extra fields to the metadata found in input, making them
+also available for other filters (see @var{drawtext} filter for examples). Default
+value is 0. The extra fields are described below:
+@table @option
+@item lavf.image2dec.source_path
+Corresponds to the full path to the input file being read.
+@item lavf.image2dec.source_basename
+Corresponds to the name of the file being read.
+@end table
+
@end table
@subsection Examples
diff --git a/doc/filters.texi b/doc/filters.texi
index 6fb660b05a..a2f862e85f 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -9932,6 +9932,15 @@ drawtext=fontfile=FreeSans.ttf:text=DOG:fontsize=24:x=10:y=20+24-max_glyph_a,
drawtext=fontfile=FreeSans.ttf:text=cow:fontsize=24:x=80:y=20+24-max_glyph_a
@end example
+@item
+Plot special @var{lavf.image2dec.source_basename} metadata onto each frame if
+such metadata exists. Otherwise, plot the string "NA". Note that image2 demuxer
+must have option @option{-export_path_metadata 1} for the special metadata fields
+to be available for filters.
+@example
+drawtext="fontsize=20:fontcolor=white:fontfile=FreeSans.ttf:text='%@{metadata\:lavf.image2dec.source_basename\:NA@}':x=10:y=10"
+@end example
+
@end itemize
For more information about libfreetype, check:
diff --git a/libavformat/img2.h b/libavformat/img2.h
index 0e5b374a6b..5fd8ff77fc 100644
--- a/libavformat/img2.h
+++ b/libavformat/img2.h
@@ -61,6 +61,7 @@ typedef struct VideoDemuxData {
int start_number_range;
int frame_size;
int ts_from_file;
+ int export_path_metadata; /**< enabled when set to 1. */
} VideoDemuxData;
typedef struct IdStrMap {
diff --git a/libavformat/img2dec.c b/libavformat/img2dec.c
index f8b4a655a5..37ee1bb746 100644
--- a/libavformat/img2dec.c
+++ b/libavformat/img2dec.c
@@ -374,6 +374,33 @@ int ff_img_read_header(AVFormatContext *s1)
return 0;
}
+/**
+ * Add this frame's source path and basename to packet's sidedata
+ * as a dictionary, so it can be used by filters like 'drawtext'.
+ */
+static int add_filename_as_pkt_side_data(char *filename, AVPacket *pkt) {
+ uint8_t* metadata;
+ int metadata_len;
+ AVDictionary *d = NULL;
+ char *packed_metadata = NULL;
+
+ av_dict_set(&d, "lavf.image2dec.source_path", filename, 0);
+ av_dict_set(&d, "lavf.image2dec.source_basename", av_basename(filename), 0);
+
+ packed_metadata = av_packet_pack_dictionary(d, &metadata_len);
+ av_dict_free(&d);
+ if (!packed_metadata)
+ return AVERROR(ENOMEM);
+ if (!(metadata = av_packet_new_side_data(pkt, AV_PKT_DATA_STRINGS_METADATA, metadata_len))) {
+ av_freep(&packed_metadata);
+ return AVERROR(ENOMEM);
+ }
+ memcpy(metadata, packed_metadata, metadata_len);
+ av_freep(&packed_metadata);
+
+ return 0;
+}
+
int ff_img_read_packet(AVFormatContext *s1, AVPacket *pkt)
{
VideoDemuxData *s = s1->priv_data;
@@ -486,6 +513,17 @@ int ff_img_read_packet(AVFormatContext *s1, AVPacket *pkt)
if (s->is_pipe)
pkt->pos = avio_tell(f[0]);
+ /*
+ * export_path_metadata must be explicitly enabled via
+ * command line options for path metadata to be exported
+ * as packet side_data.
+ */
+ if (!s->is_pipe && s->export_path_metadata == 1) {
+ res = add_filename_as_pkt_side_data(filename, pkt);
+ if (res < 0)
+ goto fail;
+ }
+
pkt->size = 0;
for (i = 0; i < 3; i++) {
if (f[i]) {
@@ -585,6 +623,7 @@ const AVOption ff_img_options[] = {
{ "none", "none", 0, AV_OPT_TYPE_CONST, {.i64 = 0 }, 0, 2, DEC, "ts_type" },
{ "sec", "second precision", 0, AV_OPT_TYPE_CONST, {.i64 = 1 }, 0, 2, DEC, "ts_type" },
{ "ns", "nano second precision", 0, AV_OPT_TYPE_CONST, {.i64 = 2 }, 0, 2, DEC, "ts_type" },
+ { "export_path_metadata", "enable metadata containing input path information", OFFSET(export_path_metadata), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, DEC }, \
COMMON_OPTIONS
};
diff --git a/libavformat/version.h b/libavformat/version.h
index 213b66b45f..43f3811df1 100644
--- a/libavformat/version.h
+++ b/libavformat/version.h
@@ -33,7 +33,7 @@
// Also please add any ticket numbers that you believe might be affected here
#define LIBAVFORMAT_VERSION_MAJOR 58
#define LIBAVFORMAT_VERSION_MINOR 35
-#define LIBAVFORMAT_VERSION_MICRO 101
+#define LIBAVFORMAT_VERSION_MICRO 102
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
LIBAVFORMAT_VERSION_MINOR, \