Andrew Eikum : strmbase: Improve QualityControl tracing.

Alexandre Julliard julliard at wine.codeweavers.com
Wed May 18 10:51:12 CDT 2016


Module: wine
Branch: master
Commit: 0025649714f25af020862be8aa1ef82ca8d8f99b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0025649714f25af020862be8aa1ef82ca8d8f99b

Author: Andrew Eikum <aeikum at codeweavers.com>
Date:   Tue May 17 13:43:36 2016 -0500

strmbase: Improve QualityControl tracing.

Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/qcap/avimux.c               | 10 ++++--
 dlls/strmbase/qualitycontrol.c   | 72 +++++++++++++++++++++++++++++++---------
 dlls/winegstreamer/gstdemux.c    |  5 ++-
 dlls/winegstreamer/gsttffilter.c |  5 ++-
 4 files changed, 72 insertions(+), 20 deletions(-)

diff --git a/dlls/qcap/avimux.c b/dlls/qcap/avimux.c
index 44a032a..533db13 100644
--- a/dlls/qcap/avimux.c
+++ b/dlls/qcap/avimux.c
@@ -1539,7 +1539,10 @@ static HRESULT WINAPI AviMuxOut_QualityControl_Notify(IQualityControl *iface,
         IBaseFilter *pSelf, Quality q)
 {
     AviMux *This = impl_from_out_IQualityControl(iface);
-    FIXME("(%p)->(%p Quality)\n", This, pSelf);
+    FIXME("(%p)->(%p { 0x%x %u %s %s })\n", This, pSelf,
+            q.Type, q.Proportion,
+            wine_dbgstr_longlong(q.Late),
+            wine_dbgstr_longlong(q.TimeStamp));
     return E_NOTIMPL;
 }
 
@@ -2273,7 +2276,10 @@ static HRESULT WINAPI AviMuxIn_QualityControl_Notify(IQualityControl *iface,
 {
     AviMuxIn *avimuxin = AviMuxIn_from_IQualityControl(iface);
     AviMux *This = impl_from_in_IPin(&avimuxin->pin.pin.IPin_iface);
-    FIXME("(%p:%s)->(%p Quality)\n", This, debugstr_w(avimuxin->pin.pin.pinInfo.achName), pSelf);
+    FIXME("(%p:%s)->(%p { 0x%x %u %s %s })\n", This, debugstr_w(avimuxin->pin.pin.pinInfo.achName), pSelf,
+            q.Type, q.Proportion,
+            wine_dbgstr_longlong(q.Late),
+            wine_dbgstr_longlong(q.TimeStamp));
     return E_NOTIMPL;
 }
 
diff --git a/dlls/strmbase/qualitycontrol.c b/dlls/strmbase/qualitycontrol.c
index 2e32b57..ce14c72 100644
--- a/dlls/strmbase/qualitycontrol.c
+++ b/dlls/strmbase/qualitycontrol.c
@@ -36,8 +36,13 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(strmbase_qc);
 
-HRESULT QualityControlImpl_Create(IPin *input, IBaseFilter *self, QualityControlImpl **ppv) {
+#define XTIME_FMT "%u.%03u"
+#define XTIME(u) (int)(u/10000000), (int)((u / 10000)%1000)
+
+HRESULT QualityControlImpl_Create(IPin *input, IBaseFilter *self, QualityControlImpl **ppv)
+{
     QualityControlImpl *This;
+    TRACE("%p, %p, %p\n", input, self, ppv);
     *ppv = HeapAlloc(GetProcessHeap(),0,sizeof(QualityControlImpl));
     if (!*ppv)
         return E_OUTOFMEMORY;
@@ -46,6 +51,7 @@ HRESULT QualityControlImpl_Create(IPin *input, IBaseFilter *self, QualityControl
     This->self = self;
     This->tonotify = NULL;
     This->clock = NULL;
+    TRACE("-> %p\n", This);
     return S_OK;
 }
 
@@ -54,26 +60,36 @@ void QualityControlImpl_Destroy(QualityControlImpl *This)
     HeapFree(GetProcessHeap(),0,This);
 }
 
-HRESULT WINAPI QualityControlImpl_QueryInterface(IQualityControl *iface, REFIID riid, void **ppv) {
+HRESULT WINAPI QualityControlImpl_QueryInterface(IQualityControl *iface, REFIID riid, void **ppv)
+{
     QualityControlImpl *This = (QualityControlImpl*)iface;
     return IBaseFilter_QueryInterface(This->self, riid, ppv);
 }
 
-ULONG WINAPI QualityControlImpl_AddRef(IQualityControl *iface) {
+ULONG WINAPI QualityControlImpl_AddRef(IQualityControl *iface)
+{
     QualityControlImpl *This = (QualityControlImpl*)iface;
     return IBaseFilter_AddRef(This->self);
 }
 
-ULONG WINAPI QualityControlImpl_Release(IQualityControl *iface) {
+ULONG WINAPI QualityControlImpl_Release(IQualityControl *iface)
+{
     QualityControlImpl *This = (QualityControlImpl*)iface;
     return IBaseFilter_Release(This->self);
 }
 
-HRESULT WINAPI QualityControlImpl_Notify(IQualityControl *iface, IBaseFilter *sender, Quality qm) {
+HRESULT WINAPI QualityControlImpl_Notify(IQualityControl *iface, IBaseFilter *sender, Quality qm)
+{
     HRESULT hr = S_FALSE;
     QualityControlImpl *This = (QualityControlImpl*)iface;
+
+    TRACE("%p %p { 0x%x %u " XTIME_FMT " " XTIME_FMT " }\n",
+            This, sender, qm.Type, qm.Proportion,
+            XTIME(qm.Late), XTIME(qm.TimeStamp));
+
     if (This->tonotify)
         return IQualityControl_Notify(This->tonotify, This->self, qm);
+
     if (This->input) {
         IPin *to = NULL;
         IPin_ConnectedTo(This->input, &to);
@@ -87,11 +103,14 @@ HRESULT WINAPI QualityControlImpl_Notify(IQualityControl *iface, IBaseFilter *se
             IPin_Release(to);
         }
     }
+
     return hr;
 }
 
-HRESULT WINAPI QualityControlImpl_SetSink(IQualityControl *iface, IQualityControl *tonotify) {
+HRESULT WINAPI QualityControlImpl_SetSink(IQualityControl *iface, IQualityControl *tonotify)
+{
     QualityControlImpl *This = (QualityControlImpl*)iface;
+    TRACE("%p %p\n", This, tonotify);
     This->tonotify = tonotify;
     return S_OK;
 }
@@ -108,7 +127,9 @@ HRESULT WINAPI QualityControlImpl_SetSink(IQualityControl *iface, IQualityContro
 #define UPDATE_RUNNING_AVG_P(avg,val) DO_RUNNING_AVG(avg,val,16)
 #define UPDATE_RUNNING_AVG_N(avg,val) DO_RUNNING_AVG(avg,val,4)
 
-void QualityControlRender_Start(QualityControlImpl *This, REFERENCE_TIME tStart) {
+void QualityControlRender_Start(QualityControlImpl *This, REFERENCE_TIME tStart)
+{
+    TRACE("%p " XTIME_FMT "\n", This, XTIME(tStart));
     This->avg_render = This->last_in_time = This->last_left = This->avg_duration = This->avg_pt = -1;
     This->clockstart = tStart;
     This->avg_rate = -1.0;
@@ -118,7 +139,9 @@ void QualityControlRender_Start(QualityControlImpl *This, REFERENCE_TIME tStart)
 }
 
 
-void QualityControlRender_SetClock(QualityControlImpl *This, IReferenceClock *clock) {
+void QualityControlRender_SetClock(QualityControlImpl *This, IReferenceClock *clock)
+{
+    TRACE("%p %p\n", This, clock);
     This->clock = clock;
 }
 
@@ -127,6 +150,9 @@ static BOOL QualityControlRender_IsLate(QualityControlImpl *This, REFERENCE_TIME
 {
     REFERENCE_TIME max_lateness = 200000;
 
+    TRACE("%p " XTIME_FMT " " XTIME_FMT " " XTIME_FMT "\n",
+            This, XTIME(jitter), XTIME(start), XTIME(stop));
+
     /* we can add a valid stop time */
     if (stop >= start)
         max_lateness += stop;
@@ -148,8 +174,12 @@ static BOOL QualityControlRender_IsLate(QualityControlImpl *This, REFERENCE_TIME
     return FALSE;
 }
 
-HRESULT QualityControlRender_WaitFor(QualityControlImpl *This, IMediaSample *sample, HANDLE ev) {
+HRESULT QualityControlRender_WaitFor(QualityControlImpl *This, IMediaSample *sample, HANDLE ev)
+{
     REFERENCE_TIME start = -1, stop = -1, jitter = 0;
+
+    TRACE("%p %p %p\n", This, sample, ev);
+
     This->current_rstart = This->current_rstop = -1;
     This->current_jitter = 0;
     if (!This->clock || FAILED(IMediaSample_GetTime(sample, &start, &stop)))
@@ -189,6 +219,8 @@ void QualityControlRender_DoQOS(QualityControlImpl *priv)
     REFERENCE_TIME start, stop, jitter, pt, entered, left, duration;
     double rate;
 
+    TRACE("%p\n", priv);
+
     if (!priv->clock || priv->current_rstart < 0)
         return;
 
@@ -228,14 +260,12 @@ void QualityControlRender_DoQOS(QualityControlImpl *priv)
         pt = priv->avg_pt;
     }
 
-#define XTIME(u) (int)(u/10000000), (int)((u / 10000)%1000)
-    TRACE("start: %u.%03u, entered %u.%03u, left %u.%03u, pt: %u.%03u, "
-          "duration %u.%03u, jitter %u.%03u\n", XTIME(start), XTIME(entered),
+    TRACE("start: " XTIME_FMT ", entered " XTIME_FMT ", left " XTIME_FMT ", pt: " XTIME_FMT ", "
+          "duration " XTIME_FMT ", jitter " XTIME_FMT "\n", XTIME(start), XTIME(entered),
           XTIME(left), XTIME(pt), XTIME(duration), XTIME(jitter));
 
-    TRACE("avg_duration: %u.%03u, avg_pt: %u.%03u, avg_rate: %g\n",
+    TRACE("avg_duration: " XTIME_FMT ", avg_pt: " XTIME_FMT ", avg_rate: %g\n",
       XTIME(priv->avg_duration), XTIME(priv->avg_pt), priv->avg_rate);
-#undef XTIME
 
     /* collect running averages. for first observations, we copy the
     * values */
@@ -297,15 +327,25 @@ void QualityControlRender_DoQOS(QualityControlImpl *priv)
 }
 
 
-void QualityControlRender_BeginRender(QualityControlImpl *This) {
+void QualityControlRender_BeginRender(QualityControlImpl *This)
+{
+    TRACE("%p\n", This);
+
     This->start = -1;
+
     if (!This->clock)
         return;
+
     IReferenceClock_GetTime(This->clock, &This->start);
+    TRACE("at: " XTIME_FMT "\n", XTIME(This->start));
 }
 
-void QualityControlRender_EndRender(QualityControlImpl *This) {
+void QualityControlRender_EndRender(QualityControlImpl *This)
+{
     REFERENCE_TIME elapsed;
+
+    TRACE("%p\n", This);
+
     if (!This->clock || This->start < 0 || FAILED(IReferenceClock_GetTime(This->clock, &This->stop)))
         return;
 
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c
index e7adbc5..f0b30e2 100644
--- a/dlls/winegstreamer/gstdemux.c
+++ b/dlls/winegstreamer/gstdemux.c
@@ -1664,7 +1664,10 @@ static HRESULT WINAPI GST_QualityControl_Notify(IQualityControl *iface, IBaseFil
 {
     GSTOutPin *pin = impl_from_IQualityControl(iface);
     REFERENCE_TIME late = qm.Late;
-    TRACE("(%p)->(%p, qm)\n", pin, sender);
+    TRACE("(%p)->(%p, { 0x%x %u %s %s })\n", pin, sender,
+            qm.Type, qm.Proportion,
+            wine_dbgstr_longlong(qm.Late),
+            wine_dbgstr_longlong(qm.TimeStamp));
     mark_wine_thread();
     if (qm.Late < 0 && -qm.Late > qm.TimeStamp)
         late = -qm.TimeStamp;
diff --git a/dlls/winegstreamer/gsttffilter.c b/dlls/winegstreamer/gsttffilter.c
index 6c60fe3..cc544d0 100644
--- a/dlls/winegstreamer/gsttffilter.c
+++ b/dlls/winegstreamer/gsttffilter.c
@@ -478,7 +478,10 @@ static HRESULT WINAPI Gstreamer_transform_QOS(TransformFilter *iface, IBaseFilte
     GstTfImpl *This = (GstTfImpl*)iface;
     REFERENCE_TIME late = qm.Late;
 
-    TRACE("%p %p qm\n", This, sender);
+    TRACE("%p %p { 0x%x %u %s %s }\n", This, sender,
+            qm.Type, qm.Proportion,
+            wine_dbgstr_longlong(qm.Late),
+            wine_dbgstr_longlong(qm.TimeStamp));
 
     mark_wine_thread();
 




More information about the wine-cvs mailing list