eb2f77caf3e99ade14dd3e45bd40f47d02064b5d
[WebKit-https.git] / Source / WebCore / platform / graphics / gstreamer / GStreamerUtilities.h
1 /*
2  *  Copyright (C) 2012, 2015, 2016 Igalia S.L
3  *  Copyright (C) 2015, 2016 Metrological Group B.V.
4  *
5  *  This library is free software; you can redistribute it and/or
6  *  modify it under the terms of the GNU Lesser General Public
7  *  License as published by the Free Software Foundation; either
8  *  version 2 of the License, or (at your option) any later version.
9  *
10  *  This library is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  *  Lesser General Public License for more details.
14  *
15  *  You should have received a copy of the GNU Lesser General Public
16  *  License along with this library; if not, write to the Free Software
17  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
18  */
19
20 #pragma once
21
22 #include "Logging.h"
23
24 #include <gst/gst.h>
25 #include <gst/video/video-format.h>
26 #include <gst/video/video-info.h>
27
28 namespace WebCore {
29
30 class IntSize;
31
32 inline bool webkitGstCheckVersion(guint major, guint minor, guint micro)
33 {
34     guint currentMajor, currentMinor, currentMicro, currentNano;
35     gst_version(&currentMajor, &currentMinor, &currentMicro, &currentNano);
36
37     if (currentMajor < major)
38         return false;
39     if (currentMajor > major)
40         return true;
41
42     if (currentMinor < minor)
43         return false;
44     if (currentMinor > minor)
45         return true;
46
47     if (currentMicro < micro)
48         return false;
49
50     return true;
51 }
52
53 GstPad* webkitGstGhostPadFromStaticTemplate(GstStaticPadTemplate*, const gchar* name, GstPad* target);
54 #if ENABLE(VIDEO)
55 bool getVideoSizeAndFormatFromCaps(GstCaps*, WebCore::IntSize&, GstVideoFormat&, int& pixelAspectRatioNumerator, int& pixelAspectRatioDenominator, int& stride);
56 bool getSampleVideoInfo(GstSample*, GstVideoInfo&);
57 #endif
58 GstBuffer* createGstBuffer(GstBuffer*);
59 GstBuffer* createGstBufferForData(const char* data, int length);
60 char* getGstBufferDataPointer(GstBuffer*);
61 void mapGstBuffer(GstBuffer*);
62 void unmapGstBuffer(GstBuffer*);
63 bool initializeGStreamer();
64 unsigned getGstPlayFlag(const char* nick);
65 GstClockTime toGstClockTime(float time);
66 bool gstRegistryHasElementForMediaType(GList* elementFactories, const char* capsString);
67
68 #if GST_CHECK_VERSION(1, 5, 3) && (ENABLE(LEGACY_ENCRYPTED_MEDIA) || ENABLE(ENCRYPTED_MEDIA))
69 GstElement* createGstDecryptor(const gchar* protectionSystem);
70 #endif
71 }