From 8218c474e7a52c686cbba3b3e1663e15b35cf879 Mon Sep 17 00:00:00 2001
From: Nicolas LeQuec <nicolas.lequec@gmail.com>
Date: Wed, 7 Jul 2021 15:21:10 +0200
Subject: [PATCH] src/clock: add new field track_str_id

In traces, it's useful to have the str_id of the elementary stream read.
It can be obtained through the clock.
---
 src/clock/clock.c  | 13 +++++++++----
 src/clock/clock.h  |  2 ++
 src/input/es_out.c |  2 ++
 3 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/clock/clock.c b/src/clock/clock.c
index 850fbb5c0f90..c3535e84cf56 100644
--- a/src/clock/clock.c
+++ b/src/clock/clock.c
@@ -73,6 +73,7 @@ struct vlc_clock_t
     vlc_clock_main_t *owner;
     vlc_tick_t delay;
     unsigned priority;
+    const char *track_str_id;
 
     const struct vlc_clock_cbs *cbs;
     void *cbs_data;
@@ -549,6 +550,7 @@ static void vlc_clock_set_slave_callbacks(vlc_clock_t *clock)
 }
 
 static vlc_clock_t *vlc_clock_main_Create(vlc_clock_main_t *main_clock,
+                                          const char* track_str_id,
                                           unsigned priority,
                                           const struct vlc_clock_cbs *cbs,
                                           void *cbs_data)
@@ -558,6 +560,7 @@ static vlc_clock_t *vlc_clock_main_Create(vlc_clock_main_t *main_clock,
         return NULL;
 
     clock->owner = main_clock;
+    clock->track_str_id = track_str_id;
     clock->delay = 0;
     clock->cbs = cbs;
     clock->cbs_data = cbs_data;
@@ -568,11 +571,12 @@ static vlc_clock_t *vlc_clock_main_Create(vlc_clock_main_t *main_clock,
 }
 
 vlc_clock_t *vlc_clock_main_CreateMaster(vlc_clock_main_t *main_clock,
+                                         const char *track_str_id,
                                          const struct vlc_clock_cbs *cbs,
                                          void *cbs_data)
 {
     /* The master has always the 0 priority */
-    vlc_clock_t *clock = vlc_clock_main_Create(main_clock, 0, cbs, cbs_data);
+    vlc_clock_t *clock = vlc_clock_main_Create(main_clock, track_str_id, 0, cbs, cbs_data);
     if (!clock)
         return NULL;
 
@@ -594,7 +598,7 @@ vlc_clock_t *vlc_clock_main_CreateMaster(vlc_clock_main_t *main_clock,
 vlc_clock_t *vlc_clock_main_CreateInputMaster(vlc_clock_main_t *main_clock)
 {
     /* The master has always the 0 priority */
-    vlc_clock_t *clock = vlc_clock_main_Create(main_clock, 0, NULL, NULL);
+    vlc_clock_t *clock = vlc_clock_main_Create(main_clock, NULL, 0, NULL, NULL);
     if (!clock)
         return NULL;
 
@@ -618,6 +622,7 @@ vlc_clock_t *vlc_clock_main_CreateInputMaster(vlc_clock_main_t *main_clock)
 }
 
 vlc_clock_t *vlc_clock_main_CreateSlave(vlc_clock_main_t *main_clock,
+                                        const char* track_str_id,
                                         enum es_format_category_e cat,
                                         const struct vlc_clock_cbs *cbs,
                                         void *cbs_data)
@@ -639,7 +644,7 @@ vlc_clock_t *vlc_clock_main_CreateSlave(vlc_clock_main_t *main_clock,
             break;
     }
 
-    vlc_clock_t *clock = vlc_clock_main_Create(main_clock, priority, cbs,
+    vlc_clock_t *clock = vlc_clock_main_Create(main_clock, track_str_id, priority, cbs,
                                                cbs_data);
     if (!clock)
         return NULL;
@@ -655,7 +660,7 @@ vlc_clock_t *vlc_clock_main_CreateSlave(vlc_clock_main_t *main_clock,
 vlc_clock_t *vlc_clock_CreateSlave(const vlc_clock_t *clock,
                                    enum es_format_category_e cat)
 {
-    return vlc_clock_main_CreateSlave(clock->owner, cat, NULL, NULL);
+    return vlc_clock_main_CreateSlave(clock->owner, clock->track_str_id, cat, NULL, NULL);
 }
 
 void vlc_clock_Delete(vlc_clock_t *clock)
diff --git a/src/clock/clock.h b/src/clock/clock.h
index c03835b38360..2a599aa8aa2a 100644
--- a/src/clock/clock.h
+++ b/src/clock/clock.h
@@ -97,6 +97,7 @@ void vlc_clock_main_ChangePause(vlc_clock_main_t *clock, vlc_tick_t system_now,
  * You must use vlc_clock_Delete to free it.
  */
 vlc_clock_t *vlc_clock_main_CreateMaster(vlc_clock_main_t *main_clock,
+                                         const char *track_str_id,
                                          const struct vlc_clock_cbs *cbs,
                                          void *cbs_data);
 
@@ -118,6 +119,7 @@ vlc_clock_t *vlc_clock_main_CreateInputMaster(vlc_clock_main_t *main_clock);
  * You must use vlc_clock_Delete to free it.
  */
 vlc_clock_t *vlc_clock_main_CreateSlave(vlc_clock_main_t *main_clock,
+                                        const char *track_str_id,
                                         enum es_format_category_e cat,
                                         const struct vlc_clock_cbs *cbs,
                                         void *cbs_data);
diff --git a/src/input/es_out.c b/src/input/es_out.c
index 7443b8ac5f37..f1781f508f8f 100644
--- a/src/input/es_out.c
+++ b/src/input/es_out.c
@@ -2315,12 +2315,14 @@ static void EsOutCreateDecoder( es_out_t *out, es_out_id_t *p_es )
         p_es->master = true;
         p_es->p_pgrm->p_master_es_clock = p_es->p_clock =
             vlc_clock_main_CreateMaster( p_es->p_pgrm->p_main_clock,
+                                         p_es->id.str_id,
                                          &clock_cbs, p_es );
     }
     else
     {
         p_es->master = false;
         p_es->p_clock = vlc_clock_main_CreateSlave( p_es->p_pgrm->p_main_clock,
+                                                    p_es->id.str_id,
                                                     p_es->fmt.i_cat,
                                                     &clock_cbs, p_es );
     }
-- 
GitLab