/*
* 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
#include <gst/audio/multichannel.h>
#endif
+#ifdef GST_API_VERSION_1
+const char* webkitGstMapInfoQuarkString = "webkit-gst-map-info";
+#endif
+
void webkitGstObjectRefSink(GstObject* gstObject)
{
#ifdef GST_API_VERSION_1
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<gssize>(newSize));
+#else
+ GST_BUFFER_SIZE(buffer) = static_cast<gsize>(newSize);
+#endif
+}
+
+char* getGstBufferDataPointer(GstBuffer* buffer)
+{
+#ifdef GST_API_VERSION_1
+ GstMiniObject* miniObject = reinterpret_cast<GstMiniObject*>(buffer);
+ GstMapInfo* mapInfo = static_cast<GstMapInfo*>(gst_mini_object_get_qdata(miniObject, g_quark_from_static_string(webkitGstMapInfoQuarkString)));
+ return reinterpret_cast<char*>(mapInfo->data);
+#else
+ return reinterpret_cast<char*>(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<GstMiniObject*>(buffer);
+ gst_mini_object_set_qdata(miniObject, g_quark_from_static_string(webkitGstMapInfoQuarkString), mapInfo, 0);
+}
+
+void unmapGstBuffer(GstBuffer* buffer)
+{
+ GstMiniObject* miniObject = reinterpret_cast<GstMiniObject*>(buffer);
+ GstMapInfo* mapInfo = static_cast<GstMapInfo*>(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
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*);