From 08a1264937b7f8ce40fd6f45a7873f47879765cb Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Bollo?= Date: Wed, 17 Jul 2013 14:31:14 +0200 Subject: [PATCH] adding facilities functions to manage buffers --- .../graphics/gstreamer/GStreamerVersioning.cpp | 74 ++++++++++++++++++++++ .../graphics/gstreamer/GStreamerVersioning.h | 8 +++ 2 files changed, 82 insertions(+) diff --git a/Source/WebCore/platform/graphics/gstreamer/GStreamerVersioning.cpp b/Source/WebCore/platform/graphics/gstreamer/GStreamerVersioning.cpp index 2e923d5..14b1939 100644 --- a/Source/WebCore/platform/graphics/gstreamer/GStreamerVersioning.cpp +++ b/Source/WebCore/platform/graphics/gstreamer/GStreamerVersioning.cpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2012 Igalia, S.L. + * Copyright (C) 2013 Collabora Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -31,6 +32,10 @@ #include #endif +#ifdef GST_API_VERSION_1 +const char* webkitGstMapInfoQuarkString = "webkit-gst-map-info"; +#endif + void webkitGstObjectRefSink(GstObject* gstObject) { #ifdef GST_API_VERSION_1 @@ -135,6 +140,75 @@ GstBuffer* createGstBuffer(GstBuffer* buffer) return newBuffer; } +GstBuffer* createGstBufferForData(const char* data, int length) +{ + GstBuffer* buffer = gst_buffer_new_and_alloc(length); + +#ifdef GST_API_VERSION_1 + gst_buffer_fill(buffer, 0, data, length); +#else + memcpy(GST_BUFFER_DATA(buffer), data, length); +#endif + + return buffer; +} + +int getGstBufferSize(GstBuffer* buffer) +{ +#ifdef GST_API_VERSION_1 + return gst_buffer_get_size(buffer); +#else + return GST_BUFFER_SIZE(buffer); +#endif +} + +void setGstBufferSize(GstBuffer* buffer, int newSize) +{ +#ifdef GST_API_VERSION_1 + gst_buffer_set_size(buffer, static_cast(newSize)); +#else + GST_BUFFER_SIZE(buffer) = static_cast(newSize); +#endif +} + +char* getGstBufferDataPointer(GstBuffer* buffer) +{ +#ifdef GST_API_VERSION_1 + GstMiniObject* miniObject = reinterpret_cast(buffer); + GstMapInfo* mapInfo = static_cast(gst_mini_object_get_qdata(miniObject, g_quark_from_static_string(webkitGstMapInfoQuarkString))); + return reinterpret_cast(mapInfo->data); +#else + return reinterpret_cast(GST_BUFFER_DATA(buffer)); +#endif +} + +#ifdef GST_API_VERSION_1 +void mapGstBuffer(GstBuffer* buffer) +{ + GstMapInfo* mapInfo = g_slice_new(GstMapInfo); + if (!gst_buffer_map(buffer, mapInfo, GST_MAP_WRITE)) { + g_slice_free(GstMapInfo, mapInfo); + gst_buffer_unref(buffer); + return; + } + + GstMiniObject* miniObject = reinterpret_cast(buffer); + gst_mini_object_set_qdata(miniObject, g_quark_from_static_string(webkitGstMapInfoQuarkString), mapInfo, 0); +} + +void unmapGstBuffer(GstBuffer* buffer) +{ + GstMiniObject* miniObject = reinterpret_cast(buffer); + GstMapInfo* mapInfo = static_cast(gst_mini_object_steal_qdata(miniObject, g_quark_from_static_string(webkitGstMapInfoQuarkString))); + + if (!mapInfo) + return; + + gst_buffer_unmap(buffer, mapInfo); + g_slice_free(GstMapInfo, mapInfo); +} +#endif + void setGstElementClassMetadata(GstElementClass* elementClass, const char* name, const char* longName, const char* description, const char* author) { #ifdef GST_API_VERSION_1 diff --git a/Source/WebCore/platform/graphics/gstreamer/GStreamerVersioning.h b/Source/WebCore/platform/graphics/gstreamer/GStreamerVersioning.h index 5c40fd7..3ee325e 100644 --- a/Source/WebCore/platform/graphics/gstreamer/GStreamerVersioning.h +++ b/Source/WebCore/platform/graphics/gstreamer/GStreamerVersioning.h @@ -37,6 +37,14 @@ GRefPtr webkitGstPipelineGetBus(GstPipeline*); bool getVideoSizeAndFormatFromCaps(GstCaps*, WebCore::IntSize&, GstVideoFormat&, int& pixelAspectRatioNumerator, int& pixelAspectRatioDenominator, int& stride); #endif GstBuffer* createGstBuffer(GstBuffer*); +GstBuffer* createGstBufferForData(const char* data, int length); +int getGstBufferSize(GstBuffer*); +void setGstBufferSize(GstBuffer*, int newSize); +char* getGstBufferDataPointer(GstBuffer*); +#ifdef GST_API_VERSION_1 +void mapGstBuffer(GstBuffer*); +void unmapGstBuffer(GstBuffer*); +#endif void setGstElementClassMetadata(GstElementClass*, const char* name, const char* longName, const char* description, const char* author); bool gstObjectIsFloating(GstObject*); void notifyGstTagsOnPad(GstElement*, GstPad*, GstTagList*); -- 2.7.4