[GStreamer] GStreamer Media Description
[WebKit-https.git] / Source / WebCore / platform / graphics / gstreamer / mse / GStreamerMediaDescription.cpp
1 /*
2  * Copyright (C) 2016 Metrological Group B.V.
3  * Copyright (C) 2016 Igalia S.L
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library 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  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public License
16  * aint with this library; see the file COPYING.LIB.  If not, write to
17  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301, USA.
19  */
20
21 #include "config.h"
22 #include "GStreamerMediaDescription.h"
23
24 #include "GUniquePtrGStreamer.h"
25
26 #include <gst/pbutils/pbutils.h>
27 #include <wtf/text/AtomicString.h>
28 #include <wtf/text/WTFString.h>
29
30 #if ENABLE(VIDEO) && USE(GSTREAMER) && ENABLE(MEDIA_SOURCE)
31
32 namespace WebCore {
33
34 AtomicString GStreamerMediaDescription::codec() const
35 {
36     GUniquePtr<gchar> description(gst_pb_utils_get_codec_description(m_caps.get()));
37     String codecName(description.get());
38
39     // Report "H.264 (Main Profile)" and "H.264 (High Profile)" just as "H.264" to allow changes between both variants
40     // go unnoticed to the SourceBuffer layer.
41     if (codecName.startsWith("H.264")) {
42         size_t braceStart = codecName.find(" (");
43         size_t braceEnd = codecName.find(")");
44         if (braceStart != notFound && braceEnd != notFound)
45             codecName.remove(braceStart, braceEnd-braceStart);
46     }
47
48     return codecName;
49 }
50
51 bool GStreamerMediaDescription::isVideo() const
52 {
53     GstStructure* structure = gst_caps_get_structure(m_caps.get(), 0);
54     const gchar* name = gst_structure_get_name(structure);
55
56     return g_str_has_prefix(name, "video/");
57 }
58
59 bool GStreamerMediaDescription::isAudio() const
60 {
61     GstStructure* structure = gst_caps_get_structure(m_caps.get(), 0);
62     const gchar* name = gst_structure_get_name(structure);
63
64     return g_str_has_prefix(name, "audio/");
65 }
66
67 bool GStreamerMediaDescription::isText() const
68 {
69     // FIXME: Implement proper text track support.
70     return false;
71 }
72
73 } // namespace WebCore.
74
75 #endif // USE(GSTREAMER)