[webkit-gtk] did 'glcolorconvert' element must be needed when play video ? seems low efficiency.

Philippe Normand philn at igalia.com
Sat Jun 9 03:35:43 PDT 2018


On Sat, 2018-06-09 at 16:32 +0800, tugouxp wrote:
> hi folks:
>   
>     From the codes of webkitgtk, during the scenaric of playing
> streams , the 'glcolorconvert' would be linked to the
> pipeline unconditionally, which would do the YUV to RGB convert by
> software algo, it seems only support one diplay layer, the yuv
> picture must be mixed with GUI on one layer,  it is a waste of cpu
> time.
> 

That's incorrect. glcolorconvert performs the color conversion in GPU,
using a shader.

The textures created in the GStreamer pipeline are directly reused by
WebKit, there shouldn't be any performance bottleneck there.

Philippe

> why the webkitgtk suppports  the mediaplayer function in the way like
> this? and if the display engine of the target platform has a seperate
> video layer which can directly show YUV format  besides OSD layer,
> can the  webkitgtk  utilize 
> the hardware advantage for supporting two layers?
> 
> thanks for your kindly support.!
> 
>  1054 GstElement* MediaPlayerPrivateGStreamerBase::createVideoSinkGL(
> )
>   1055 {
>   1056     if (!webkitGstCheckVersion(1, 8, 0))
>   1057     ¦   return nullptr;
>   1058  
>   1059     gboolean result = TRUE;
>   1060     GstElement* videoSink = gst_bin_new(nullptr);
>   1061     GstElement* upload = gst_element_factory_make("glupload", 
> nullptr);
>   1062     GstElement* colorconvert = gst_element_factory_make("glcol
> orconvert", nullptr);
>   1063     GstElement* appsink = createGLAppSink();
>   1064  
>   1065     if (!appsink || !upload || !colorconvert) {
>   1066     ¦   GST_WARNING("Failed to create GstGL elements");
>   1067     ¦   gst_object_unref(videoSink);
>   1068  
>   1069     ¦   if (upload)
>   1070     ¦   ¦   gst_object_unref(upload);
>   1071     ¦   if (colorconvert)
>   1072     ¦   ¦   gst_object_unref(colorconvert);
>   1073     ¦   if (appsink)
>   1074     ¦   ¦   gst_object_unref(appsink);
>   1075  
>   1076     ¦   return nullptr;
>   1077     }
>   1078  
>   1079     gst_bin_add_many(GST_BIN(videoSink), upload, colorconvert,
>  appsink, nullptr);
>   1080  
>   1081     GRefPtr<GstCaps> caps = adoptGRef(gst_caps_from_string("vi
> deo/x-
> raw(" GST_CAPS_FEATURE_MEMORY_GL_MEMORY "), format = (string) " GST_G
> L_CAPS_FORMAT));
>   1082  
>   1083     result &= gst_element_link_pads(upload, "src", colorconver
> t, "sink");
>   1084     result &= gst_element_link_pads_filtered(colorconvert, "sr
> c", appsink, "sink", caps.get());
>   1085  
>   1086     GRefPtr<GstPad> pad = adoptGRef(gst_element_get_static_pad
> (upload, "sink"));
>   1087     gst_element_add_pad(videoSink, gst_ghost_pad_new("sink", p
> ad.get()));
> 
> 
> 
> 
>  
> _______________________________________________
> webkit-gtk mailing list
> webkit-gtk at lists.webkit.org
> https://lists.webkit.org/mailman/listinfo/webkit-gtk


More information about the webkit-gtk mailing list