The branch, master has been updated
       via  c75ada5040d1183e2f67b1e228da31dde67bc0b5 (commit)
      from  32f73138f593a79b50e5eb50de3bdece977757f4 (commit)


- Log -----------------------------------------------------------------
commit c75ada5040d1183e2f67b1e228da31dde67bc0b5
Author:     Romain Beauxis <[email protected]>
AuthorDate: Sat Nov 8 10:32:32 2025 -0600
Commit:     Marton Balint <[email protected]>
CommitDate: Sat Nov 22 18:38:40 2025 +0000

    ffplay: print new metadata

diff --git a/fftools/cmdutils.c b/fftools/cmdutils.c
index 35f786dba5..e906d4506d 100644
--- a/fftools/cmdutils.c
+++ b/fftools/cmdutils.c
@@ -1613,3 +1613,28 @@ int check_avoptions(AVDictionary *m)
 
     return 0;
 }
+
+void dump_dictionary(void *ctx, const AVDictionary *m,
+                     const char *name, const char *indent,
+                     int log_level)
+{
+    const AVDictionaryEntry *tag = NULL;
+
+    if (!m)
+        return;
+
+    av_log(ctx, log_level, "%s%s:\n", indent, name);
+    while ((tag = av_dict_iterate(m, tag))) {
+        const char *p = tag->value;
+        av_log(ctx, log_level, "%s  %-16s: ", indent, tag->key);
+        while (*p) {
+            size_t len = strcspn(p, "\x8\xa\xb\xc\xd");
+            av_log(ctx, log_level, "%.*s", (int)(FFMIN(255, len)), p);
+            p += len;
+            if (*p == 0xd) av_log(ctx, log_level, " ");
+            if (*p == 0xa) av_log(ctx, log_level, "\n%s  %-16s: ", indent, "");
+            if (*p) p++;
+        }
+        av_log(ctx, log_level, "\n");
+    }
+}
diff --git a/fftools/cmdutils.h b/fftools/cmdutils.h
index 93e05c7130..85b468f2af 100644
--- a/fftools/cmdutils.h
+++ b/fftools/cmdutils.h
@@ -549,4 +549,12 @@ int check_avoptions(AVDictionary *m);
 
 int cmdutils_isalnum(char c);
 
+/**
+ * This does the same as libavformat/dump.c corresponding function
+ * and should probably be kept in sync when the other one changes.
+ */
+void dump_dictionary(void *ctx, const AVDictionary *m,
+                     const char *name, const char *indent,
+                     int log_level);
+
 #endif /* FFTOOLS_CMDUTILS_H */
diff --git a/fftools/ffplay.c b/fftools/ffplay.c
index dc2627521e..dcd20e70bc 100644
--- a/fftools/ffplay.c
+++ b/fftools/ffplay.c
@@ -2843,6 +2843,7 @@ static int read_thread(void *arg)
     int st_index[AVMEDIA_TYPE_NB];
     AVPacket *pkt = NULL;
     int64_t stream_start_time;
+    char metadata_description[96];
     int pkt_in_play_range = 0;
     const AVDictionaryEntry *t;
     SDL_mutex *wait_mutex = SDL_CreateMutex();
@@ -2950,8 +2951,10 @@ static int read_thread(void *arg)
 
     is->realtime = is_realtime(ic);
 
-    if (show_status)
+    if (show_status) {
+        fprintf(stderr, "\x1b[2K\r");
         av_dump_format(ic, 0, is->filename, 0);
+    }
 
     for (i = 0; i < ic->nb_streams; i++) {
         AVStream *st = ic->streams[i];
@@ -2960,6 +2963,9 @@ static int read_thread(void *arg)
         if (type >= 0 && wanted_stream_spec[type] && st_index[type] == -1)
             if (avformat_match_stream_specifier(ic, st, 
wanted_stream_spec[type]) > 0)
                 st_index[type] = i;
+        // Clear all pre-existing metadata update flags to avoid printing
+        // initial metadata as update.
+        st->event_flags &= ~AVSTREAM_EVENT_FLAG_METADATA_UPDATED;
     }
     for (i = 0; i < AVMEDIA_TYPE_NB; i++) {
         if (wanted_stream_spec[i] && st_index[i] == -1) {
@@ -3128,6 +3134,19 @@ static int read_thread(void *arg)
         } else {
             is->eof = 0;
         }
+
+        if (show_status && ic->streams[pkt->stream_index]->event_flags &
+            AVSTREAM_EVENT_FLAG_METADATA_UPDATED) {
+            fprintf(stderr, "\x1b[2K\r");
+            snprintf(metadata_description,
+                     sizeof(metadata_description),
+                     "\r  New metadata for stream %d",
+                     pkt->stream_index);
+            dump_dictionary(NULL, ic->streams[pkt->stream_index]->metadata,
+                               metadata_description, "    ", AV_LOG_INFO);
+        }
+        ic->streams[pkt->stream_index]->event_flags &= 
~AVSTREAM_EVENT_FLAG_METADATA_UPDATED;
+
         /* check if packet is in play range specified by user, then queue, 
otherwise discard */
         stream_start_time = ic->streams[pkt->stream_index]->start_time;
         pkt_ts = pkt->pts == AV_NOPTS_VALUE ? pkt->dts : pkt->pts;

-----------------------------------------------------------------------

Summary of changes:
 fftools/cmdutils.c | 25 +++++++++++++++++++++++++
 fftools/cmdutils.h |  8 ++++++++
 fftools/ffplay.c   | 21 ++++++++++++++++++++-
 3 files changed, 53 insertions(+), 1 deletion(-)


hooks/post-receive
-- 

_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to