summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Isorce <julien.isorce@gmail.com>2009-10-22 14:26:30 +0200
committerJulien Isorce <julien.isorce@gmail.com>2009-10-22 14:26:30 +0200
commit2e4131926f2726fe8fee5c39dd9357f14764d0cb (patch)
treec1369a8bb8223546104172d7462fa8c0e89beb47
parent79fe732785076365b7f3a1ddad898394f40fda04 (diff)
dshowsrcwrapper: cleanup push buffer callback
-rw-r--r--sys/dshowsrcwrapper/gstdshowaudiosrc.cpp10
-rw-r--r--sys/dshowsrcwrapper/gstdshowfakesink.cpp18
-rw-r--r--sys/dshowsrcwrapper/gstdshowfakesink.h4
-rw-r--r--sys/dshowsrcwrapper/gstdshowvideosrc.cpp22
4 files changed, 29 insertions, 25 deletions
diff --git a/sys/dshowsrcwrapper/gstdshowaudiosrc.cpp b/sys/dshowsrcwrapper/gstdshowaudiosrc.cpp
index f9e4eb0bb..bdf3c47b3 100644
--- a/sys/dshowsrcwrapper/gstdshowaudiosrc.cpp
+++ b/sys/dshowsrcwrapper/gstdshowaudiosrc.cpp
@@ -94,8 +94,8 @@ static void gst_dshowaudiosrc_reset (GstAudioSrc * asrc);
/* utils */
static GstCaps *gst_dshowaudiosrc_getcaps_from_streamcaps (GstDshowAudioSrc *
src, IPin * pin, IAMStreamConfig * streamcaps);
-static gboolean gst_dshowaudiosrc_push_buffer (byte * buffer, long size,
- gpointer src_object, UINT64 start, UINT64 stop);
+static gboolean gst_dshowaudiosrc_push_buffer (guint8 * buffer, guint size,
+ gpointer src_object, GstClockTime duration);
static void
gst_dshowaudiosrc_init_interfaces (GType type)
@@ -830,8 +830,8 @@ gst_dshowaudiosrc_getcaps_from_streamcaps (GstDshowAudioSrc * src, IPin * pin,
}
static gboolean
-gst_dshowaudiosrc_push_buffer (byte * buffer, long size, gpointer src_object,
- UINT64 start, UINT64 stop)
+gst_dshowaudiosrc_push_buffer (guint8 * buffer, guint size, gpointer src_object,
+ GstClockTime duration)
{
GstDshowAudioSrc *src = GST_DSHOWAUDIOSRC (src_object);
@@ -840,7 +840,7 @@ gst_dshowaudiosrc_push_buffer (byte * buffer, long size, gpointer src_object,
}
g_mutex_lock (src->gbarray_lock);
- g_byte_array_prepend (src->gbarray, (guint8 *) buffer, size);
+ g_byte_array_prepend (src->gbarray, buffer, size);
g_mutex_unlock (src->gbarray_lock);
return TRUE;
diff --git a/sys/dshowsrcwrapper/gstdshowfakesink.cpp b/sys/dshowsrcwrapper/gstdshowfakesink.cpp
index 0dbdcadbb..ca6a9a65a 100644
--- a/sys/dshowsrcwrapper/gstdshowfakesink.cpp
+++ b/sys/dshowsrcwrapper/gstdshowfakesink.cpp
@@ -57,17 +57,17 @@ HRESULT CDshowFakeSink::CheckMediaType (const CMediaType * pmt)
HRESULT CDshowFakeSink::DoRenderSample (IMediaSample * pMediaSample)
{
if (pMediaSample && m_callback) {
- BYTE *
- pBuffer = NULL;
- LONGLONG
- lStart = 0, lStop = 0;
+ guint8 *pBuffer = NULL;
pMediaSample->GetPointer (&pBuffer);
- long
- size = pMediaSample->GetActualDataLength ();
+
+ guint size = pMediaSample->GetActualDataLength ();
+
+ GstClockTimeDiff lStart = 0;
+ GstClockTimeDiff lStop = 0;
pMediaSample->GetTime (&lStart, &lStop);
- lStart *= 100;
- lStop *= 100;
- m_callback (pBuffer, size, m_data, lStart, lStop);
+
+ GstClockTime duration = (lStop - lStart) * 100;
+ m_callback (pBuffer, size, m_data, duration);
}
return S_OK;
diff --git a/sys/dshowsrcwrapper/gstdshowfakesink.h b/sys/dshowsrcwrapper/gstdshowfakesink.h
index 78302ab6a..9349db583 100644
--- a/sys/dshowsrcwrapper/gstdshowfakesink.h
+++ b/sys/dshowsrcwrapper/gstdshowfakesink.h
@@ -30,8 +30,8 @@ static const GUID CLSID_DshowFakeSink =
0x73}
};
-typedef bool (*push_buffer_func) (byte * buffer, long size, gpointer src_object,
- UINT64 start, UINT64 stop);
+typedef bool (*push_buffer_func) (guint8 * buffer, guint size, gpointer src_object,
+ GstClockTime duration);
class CDshowFakeSink:public CBaseRenderer
{
diff --git a/sys/dshowsrcwrapper/gstdshowvideosrc.cpp b/sys/dshowsrcwrapper/gstdshowvideosrc.cpp
index 601eee25d..ef722c218 100644
--- a/sys/dshowsrcwrapper/gstdshowvideosrc.cpp
+++ b/sys/dshowsrcwrapper/gstdshowvideosrc.cpp
@@ -101,8 +101,8 @@ static GstCaps *gst_dshowvideosrc_getcaps_from_streamcaps (GstDshowVideoSrc *
src, IPin * pin);
static GstCaps *gst_dshowvideosrc_getcaps_from_enum_mediatypes (GstDshowVideoSrc *
src, IPin * pin);
-static gboolean gst_dshowvideosrc_push_buffer (byte * buffer, long size,
- gpointer src_object, UINT64 start, UINT64 stop);
+static gboolean gst_dshowvideosrc_push_buffer (guint8 * buffer, guint size,
+ gpointer src_object, GstClockTime duration);
static void
gst_dshowvideosrc_init_interfaces (GType type)
@@ -1005,11 +1005,11 @@ gst_dshowvideosrc_getcaps_from_enum_mediatypes (GstDshowVideoSrc * src, IPin * p
}
static gboolean
-gst_dshowvideosrc_push_buffer (byte * buffer, long size, gpointer src_object,
- UINT64 start, UINT64 stop)
+gst_dshowvideosrc_push_buffer (guint8 * buffer, guint size, gpointer src_object,
+ GstClockTime duration)
{
GstDshowVideoSrc *src = GST_DSHOWVIDEOSRC (src_object);
- GstBuffer *buf;
+ GstBuffer *buf = NULL;
IPin *pPin = NULL;
HRESULT hres = S_FALSE;
AM_MEDIA_TYPE *pMediaType = NULL;
@@ -1022,9 +1022,13 @@ gst_dshowvideosrc_push_buffer (byte * buffer, long size, gpointer src_object,
buf = gst_buffer_new_and_alloc (size);
GST_BUFFER_SIZE (buf) = size;
- GST_BUFFER_TIMESTAMP (buf) = gst_clock_get_time (GST_ELEMENT (src)->clock);
- GST_BUFFER_TIMESTAMP (buf) -= GST_ELEMENT (src)->base_time;
- GST_BUFFER_DURATION (buf) = stop - start;
+
+ GstClock *clock = gst_element_get_clock (GST_ELEMENT (src));
+ GST_BUFFER_TIMESTAMP (buf) =
+ GST_CLOCK_DIFF (gst_element_get_base_time (GST_ELEMENT (src)), gst_clock_get_time (clock));
+ gst_object_unref (clock);
+
+ GST_BUFFER_DURATION (buf) = duration;
if (src->is_rgb) {
/* FOR RGB directshow decoder will return bottom-up BITMAP
@@ -1044,7 +1048,7 @@ gst_dshowvideosrc_push_buffer (byte * buffer, long size, gpointer src_object,
GST_DEBUG ("push_buffer => pts %" GST_TIME_FORMAT "duration %"
GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
- GST_TIME_ARGS (stop - start));
+ GST_TIME_ARGS (duration));
/* the negotiate() method already set caps on the source pad */
gst_buffer_set_caps (buf, GST_PAD_CAPS (GST_BASE_SRC_PAD (src)));