Bug 135114

Summary: [GStreamer] [GTK] WebKit does not build with GStreamer 1.4
Product: WebKit Reporter: Adrian Perez <aperez>
Component: WebKitGTKAssignee: Adrian Perez <aperez>
Status: RESOLVED FIXED    
Severity: Normal CC: cgarcia, commit-queue, mrobinson, pnormand, scampa.giovanni, vjaquez
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: Unspecified   
OS: Unspecified   
Attachments:
Description Flags
Patch
none
Patch
none
Patch
none
Patch none

Description Adrian Perez 2014-07-21 02:04:52 PDT
Ideally, we should try to keep supporting GStreamer 1.x (where x<4) to make
it make it possible for downstreams to keep using previous versions. For
example distributions may want to update WebKitGTK without having to update
GStreamer.
Comment 1 Adrian Perez 2014-07-21 02:12:54 PDT
Relevant part of the build log:

../../Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1005:31: error: cannot initialize a variable of type 'GstMpegTsSection *' (aka '_GstMpegTsSection *') with an rvalue of type 'GstMpegtsSection *' (aka '_GstMp
egtsSection *')
            GstMpegTsSection* section = gst_message_parse_mpegts_section(message);
                              ^         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1051:16: error: member access into incomplete type 'GstMpegTsSection' (aka '_GstMpegTsSection')
    if (section->section_type == GST_MPEGTS_SECTION_PMT) {
               ^
../../Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:49:16: note: forward declaration of '_GstMpegTsSection'
typedef struct _GstMpegTsSection GstMpegTsSection;
               ^
../../Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1052:15: error: unknown type name 'GstMpegTsPMT'; did you mean 'GstMpegtsPMT'?
        const GstMpegTsPMT* pmt = gst_mpegts_section_get_pmt(section);
              ^~~~~~~~~~~~
              GstMpegtsPMT
/usr/include/gstreamer-1.0/gst/mpegts/gstmpegtssection.h:212:30: note: 'GstMpegtsPMT' declared here
typedef struct _GstMpegtsPMT GstMpegtsPMT;
                             ^
../../Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1052:35: error: no matching function for call to 'gst_mpegts_section_get_pmt'
        const GstMpegTsPMT* pmt = gst_mpegts_section_get_pmt(section);
                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/gstreamer-1.0/gst/mpegts/gstmpegtssection.h:374:21: note: candidate function not viable: cannot convert argument of incomplete type 'GstMpegTsSection *' (aka '_GstMpegTsSection *') to 'GstMpegtsSection *' (aka '_GstMpegtsSecti
on *')
const GstMpegtsPMT *gst_mpegts_section_get_pmt (GstMpegtsSection *section);
                    ^
../../Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1055:19: error: unknown type name 'GstMpegTsPMTStream'; did you mean 'GstMpegtsPMTStream'?
            const GstMpegTsPMTStream* stream = static_cast<const GstMpegTsPMTStream*>(((pmt->streams)->pdata)[i]);
                  ^~~~~~~~~~~~~~~~~~
                  GstMpegtsPMTStream
/usr/include/gstreamer-1.0/gst/mpegts/gstmpegtssection.h:211:36: note: 'GstMpegtsPMTStream' declared here
typedef struct _GstMpegtsPMTStream GstMpegtsPMTStream;
                                   ^
../../Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1055:66: error: unknown type name 'GstMpegTsPMTStream'; did you mean 'GstMpegtsPMTStream'?
            const GstMpegTsPMTStream* stream = static_cast<const GstMpegTsPMTStream*>(((pmt->streams)->pdata)[i]);
                                                                 ^~~~~~~~~~~~~~~~~~
                                                                 GstMpegtsPMTStream
/usr/include/gstreamer-1.0/gst/mpegts/gstmpegtssection.h:211:36: note: 'GstMpegtsPMTStream' declared here
typedef struct _GstMpegtsPMTStream GstMpegtsPMTStream;
                                   ^
../../Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1074:27: error: unknown type name 'GstMpegTsDescriptor'; did you mean 'GstMpegtsDescriptor'?
                    const GstMpegTsDescriptor* descriptor = static_cast<const GstMpegTsDescriptor*>(((stream->descriptors)->pdata)[j]);
                          ^~~~~~~~~~~~~~~~~~~
                          GstMpegtsDescriptor
/usr/include/gstreamer-1.0/gst/mpegts/gstmpegtsdescriptor.h:237:37: note: 'GstMpegtsDescriptor' declared here
typedef struct _GstMpegtsDescriptor GstMpegtsDescriptor;
                                    ^
../../Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1074:79: error: unknown type name 'GstMpegTsDescriptor'; did you mean 'GstMpegtsDescriptor'?
                    const GstMpegTsDescriptor* descriptor = static_cast<const GstMpegTsDescriptor*>(((stream->descriptors)->pdata)[j]);
                                                                              ^~~~~~~~~~~~~~~~~~~
                                                                              GstMpegtsDescriptor
/usr/include/gstreamer-1.0/gst/mpegts/gstmpegtsdescriptor.h:237:37: note: 'GstMpegtsDescriptor' declared here
typedef struct _GstMpegtsDescriptor GstMpegtsDescriptor;
                                    ^
../../Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1085:50: error: member access into incomplete type 'GstMpegTsSection' (aka '_GstMpegTsSection')
        AtomicString pid = String::number(section->pid);
                                                 ^
../../Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:49:16: note: forward declaration of '_GstMpegTsSection'
typedef struct _GstMpegTsSection GstMpegTsSection;
               ^
../../Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1090:32: error: no matching function for call to 'gst_mpegts_section_get_data'
        GRefPtr<GBytes> data = gst_mpegts_section_get_data(section);
                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/gstreamer-1.0/gst/mpegts/gstmpegtssection.h:179:9: note: candidate function not viable: cannot convert argument of incomplete type 'GstMpegTsSection *' (aka '_GstMpegTsSection *') to 'GstMpegtsSection *' (aka '_GstMpegtsSectio
n *')
GBytes *gst_mpegts_section_get_data (GstMpegtsSection *section);
        ^
Comment 2 Víctor M. Jáquez L. 2014-07-21 02:20:37 PDT
The reason of this is 
http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=22dfd9aef361c6e630fe32d6b7f6c07588a2dff9

Shouldn't we have a policy for GStreamer not stable API and/or gst-plugins-bad API?
Comment 3 Adrian Perez 2014-07-21 22:51:44 PDT
Created attachment 235270 [details]
Patch
Comment 4 Carlos Garcia Campos 2014-07-21 23:57:08 PDT
Comment on attachment 235270 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=235270&action=review

> Source/WebCore/ChangeLog:10
> +        No new tests needed.

This line can be omitted.

> Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:46
> +#if GST_CHECK_VERSION(1, 3, 90)
> +typedef struct _GstMpegtsDescriptor GstMpegTsDescriptor;
> +typedef struct _GstMpegtsPMTStream GstMpegTsPMTStream;
> +typedef struct _GstMpegtsSection GstMpegTsSection;
> +typedef struct _GstMpegtsPMT GstMpegTsPMT;
> +#endif
> +typedef struct _GstMpegtsSection GstMpegtsSection;

I'm not sure I understand this. The current code uses GstMpegTsSection, but with gst < 1.3.90 we define GstMpegtsSection, but still using GstMpegTsSection?
Comment 5 Philippe Normand 2014-07-22 00:03:06 PDT
Comment on attachment 235270 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=235270&action=review

>> Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:46
>> +typedef struct _GstMpegtsSection GstMpegtsSection;
> 
> I'm not sure I understand this. The current code uses GstMpegTsSection, but with gst < 1.3.90 we define GstMpegtsSection, but still using GstMpegTsSection?

Like I said in the other bug, let's just forget about 1.3.90, make sure gstreamer-mpegts >= 1.4 is checked and only support it. 1.3.x had unstable API that we don't want to support.
Comment 6 Philippe Normand 2014-07-22 00:10:06 PDT
*** Bug 134924 has been marked as a duplicate of this bug. ***
Comment 7 Adrian Perez 2014-07-22 00:23:03 PDT
(In reply to comment #4)
> (From update of attachment 235270 [details])
> View in context: https://bugs.webkit.org/attachment.cgi?id=235270&action=review
> 
> > Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:46
> > +#if GST_CHECK_VERSION(1, 3, 90)
> > +typedef struct _GstMpegtsDescriptor GstMpegTsDescriptor;
> > +typedef struct _GstMpegtsPMTStream GstMpegTsPMTStream;
> > +typedef struct _GstMpegtsSection GstMpegTsSection;
> > +typedef struct _GstMpegtsPMT GstMpegTsPMT;
> > +#endif
> > +typedef struct _GstMpegtsSection GstMpegtsSection;
> 
> I'm not sure I understand this. The current code uses GstMpegTsSection, but with gst < 1.3.90 we define GstMpegtsSection, but still using GstMpegTsSection?

Ah, typing mistake. I meant to add an #else which keeps the existing
declaration of the typedef for GStreamer <1.4.0.
Comment 8 Adrian Perez 2014-07-22 00:23:44 PDT
(In reply to comment #5)
> (From update of attachment 235270 [details])
> View in context: https://bugs.webkit.org/attachment.cgi?id=235270&action=review
> 
> >> Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:46
> >> +typedef struct _GstMpegtsSection GstMpegtsSection;
> > 
> > I'm not sure I understand this. The current code uses GstMpegTsSection, but with gst < 1.3.90 we define GstMpegtsSection, but still using GstMpegTsSection?
> 
> Like I said in the other bug, let's just forget about 1.3.90, make sure gstreamer-mpegts >= 1.4 is checked and only support it. 1.3.x had unstable API that we don't want to support.

Sure, I will change the check to use the different typedefs on 1.4.0
and above.
Comment 9 Adrian Perez 2014-07-22 00:24:56 PDT
Created attachment 235272 [details]
Patch
Comment 10 Adrian Perez 2014-07-22 00:56:09 PDT
Created attachment 235273 [details]
Patch
Comment 11 Philippe Normand 2014-07-22 00:58:44 PDT
Comment on attachment 235273 [details]
Patch

Perfect! Thanks :)
Comment 12 WebKit Commit Bot 2014-07-22 01:03:23 PDT
Comment on attachment 235273 [details]
Patch

Rejecting attachment 235273 [details] from commit-queue.

Failed to run "['/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch', '--status-host=webkit-queues.appspot.com', '--bot-id=webkit-cq-02', 'validate-changelog', '--check-oops', '--non-interactive', 235273, '--port=mac']" exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

/Volumes/Data/EWS/WebKit/Source/WebCore/ChangeLog neither lists a valid reviewer nor contains the string "Unreviewed" or "Rubber stamp" (case insensitive).

Full output: http://webkit-queues.appspot.com/results/5237468114714624
Comment 13 Adrian Perez 2014-07-22 01:10:24 PDT
Created attachment 235275 [details]
Patch
Comment 14 WebKit Commit Bot 2014-07-22 01:51:16 PDT
Comment on attachment 235275 [details]
Patch

Clearing flags on attachment: 235275

Committed r171339: <http://trac.webkit.org/changeset/171339>
Comment 15 WebKit Commit Bot 2014-07-22 01:51:21 PDT
All reviewed patches have been landed.  Closing bug.