mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-23 18:21:04 +00:00
gldownload: Micro-optimisation. Don't check output caps on every buffer
The output caps will only change on a set_caps() call, so check if they contain the SystemMemory feature then and save some per-buffer CPU.
This commit is contained in:
parent
6714809529
commit
f02993921c
2 changed files with 16 additions and 17 deletions
|
@ -94,11 +94,18 @@ static gboolean
|
|||
gst_gl_download_element_set_caps (GstBaseTransform * bt, GstCaps * in_caps,
|
||||
GstCaps * out_caps)
|
||||
{
|
||||
GstGLDownloadElement *dl = GST_GL_DOWNLOAD_ELEMENT (bt);
|
||||
GstVideoInfo out_info;
|
||||
GstCapsFeatures *features = NULL;
|
||||
|
||||
if (!gst_video_info_from_caps (&out_info, out_caps))
|
||||
return FALSE;
|
||||
|
||||
features = gst_caps_get_features (out_caps, 0);
|
||||
|
||||
dl->do_pbo_transfers = (!features || gst_caps_features_contains (features,
|
||||
GST_CAPS_FEATURE_MEMORY_SYSTEM_MEMORY));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -160,31 +167,21 @@ static GstFlowReturn
|
|||
gst_gl_download_element_prepare_output_buffer (GstBaseTransform * bt,
|
||||
GstBuffer * inbuf, GstBuffer ** outbuf)
|
||||
{
|
||||
GstCaps *src_caps = gst_pad_get_current_caps (bt->srcpad);
|
||||
GstCapsFeatures *features = NULL;
|
||||
GstGLDownloadElement *dl = GST_GL_DOWNLOAD_ELEMENT (bt);
|
||||
gint i, n;
|
||||
|
||||
*outbuf = inbuf;
|
||||
|
||||
if (src_caps)
|
||||
features = gst_caps_get_features (src_caps, 0);
|
||||
if (dl->do_pbo_transfers) {
|
||||
n = gst_buffer_n_memory (*outbuf);
|
||||
for (i = 0; i < n; i++) {
|
||||
GstMemory *mem = gst_buffer_peek_memory (*outbuf, i);
|
||||
|
||||
n = gst_buffer_n_memory (*outbuf);
|
||||
for (i = 0; i < n; i++) {
|
||||
GstMemory *mem = gst_buffer_peek_memory (*outbuf, i);
|
||||
|
||||
if (gst_is_gl_memory (mem)) {
|
||||
if (!features || gst_caps_features_contains (features,
|
||||
GST_CAPS_FEATURE_MEMORY_SYSTEM_MEMORY)) {
|
||||
if (gst_is_gl_memory_pbo (mem))
|
||||
gst_gl_memory_pbo_download_transfer ((GstGLMemoryPBO *) mem);
|
||||
}
|
||||
if (gst_is_gl_memory_pbo (mem))
|
||||
gst_gl_memory_pbo_download_transfer ((GstGLMemoryPBO *) mem);
|
||||
}
|
||||
}
|
||||
|
||||
if (src_caps)
|
||||
gst_caps_unref (src_caps);
|
||||
|
||||
return GST_FLOW_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -43,6 +43,8 @@ struct _GstGLDownloadElement
|
|||
{
|
||||
/* <private> */
|
||||
GstGLBaseFilter parent;
|
||||
|
||||
gboolean do_pbo_transfers;
|
||||
};
|
||||
|
||||
struct _GstGLDownloadElementClass
|
||||
|
|
Loading…
Reference in a new issue