static HRESULT WINAPI Gstreamer_transform_QOS(TransformFilter *iface, IBaseFilter *sender, Quality qm) { GstTfImpl *This = (GstTfImpl*)iface; REFERENCE_TIME late = qm.Late; if (qm.Late < 0 && -qm.Late > qm.TimeStamp) late = -qm.TimeStamp; gst_pad_push_event(This->my_sink, gst_event_new_qos(1000. / qm.Proportion, late * 100, qm.TimeStamp * 100)); return TransformFilterImpl_Notify(iface, sender, qm); }
static HRESULT WINAPI TransformFilter_QualityControlImpl_Notify(IQualityControl *iface, IBaseFilter *sender, Quality qm) { QualityControlImpl *qc = (QualityControlImpl*)iface; TransformFilter *This = impl_from_IBaseFilter(qc->self); if (This->pFuncsTable->pfnNotify) return This->pFuncsTable->pfnNotify(This, sender, qm); else return TransformFilterImpl_Notify(This, sender, qm); }
static HRESULT WINAPI Gstreamer_transform_QOS(TransformFilter *iface, IBaseFilter *sender, Quality qm) { GstTfImpl *This = (GstTfImpl*)iface; REFERENCE_TIME late = qm.Late; TRACE("%p %p qm\n", This, sender); mark_wine_thread(); if (qm.Late < 0 && -qm.Late > qm.TimeStamp) late = -qm.TimeStamp; gst_pad_push_event(This->my_sink, gst_event_new_qos(late <= 0 ? GST_QOS_TYPE_OVERFLOW : GST_QOS_TYPE_UNDERFLOW, 1000. / qm.Proportion, late * 100, qm.TimeStamp * 100)); return TransformFilterImpl_Notify(iface, sender, qm); }