1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
From 2f11f9247972d09ba461de10be2398e513764045 Mon Sep 17 00:00:00 2001
From: Haihua Hu <jared.hu@nxp.com>
Date: Fri, 17 Nov 2017 13:06:56 +0800
Subject: [PATCH] [MMFMWK-7782] glupload: need upload each plane to single
eglimage when output format is not RGBA
when glupload out format is not RGBA, need to use single eglimage
upload each plane.
Upstream-Status: Inappropriate [i.MX specific]
---
gst-libs/gst/gl/gstglupload.c | 62 ++++++++++++++++++++++---------------------
1 file changed, 32 insertions(+), 30 deletions(-)
diff --git a/gst-libs/gst/gl/gstglupload.c b/gst-libs/gst/gl/gstglupload.c
index 5c7eca0..ed5e54b 100644
--- a/gst-libs/gst/gl/gstglupload.c
+++ b/gst-libs/gst/gl/gstglupload.c
@@ -657,6 +657,7 @@ _dma_buf_upload_accept (gpointer impl, GstBuffer * buffer, GstCaps * in_caps,
gsize mems_skip[GST_VIDEO_MAX_PLANES];
GstMemory *mems[GST_VIDEO_MAX_PLANES];
guint i;
+ GstVideoFormat out_fmt;
n_mem = gst_buffer_n_memory (buffer);
meta = gst_buffer_get_video_meta (buffer);
@@ -773,40 +774,41 @@ _dma_buf_upload_accept (gpointer impl, GstBuffer * buffer, GstCaps * in_caps,
return FALSE;
}
-#ifdef EGL_DMA_BUF_PLANE1_FD_EXT
- /* Now create one single EGLImage */
- /* check if one is cached */
- dmabuf->eglimage[0] = _get_cached_eglimage (mems[0], 0);
- if (dmabuf->eglimage[0])
- return TRUE;
-
- dmabuf->eglimage[0] =
- gst_egl_image_from_dmabuf_singleplaner (dmabuf->upload->context,
- mems, in_info, n_planes, mems_skip);
- if (!dmabuf->eglimage[0])
- return FALSE;
-
- _set_cached_eglimage (mems[0], dmabuf->eglimage[0], 0);
-#else
- /* Now create an EGLImage for each dmabufs */
- for (i = 0; i < n_planes; i++) {
+ out_fmt = GST_VIDEO_INFO_FORMAT (&dmabuf->upload->priv->out_info);
+ if (out_fmt == GST_VIDEO_FORMAT_RGBA) {
+ /* Now create one single EGLImage */
/* check if one is cached */
- dmabuf->eglimage[i] = _get_cached_eglimage (mems[i], i);
- if (dmabuf->eglimage[i])
- continue;
-
- /* otherwise create one and cache it */
- dmabuf->eglimage[i] =
- gst_egl_image_from_dmabuf (dmabuf->upload->context,
- gst_dmabuf_memory_get_fd (mems[i]), in_info, i,
- mems[i]->offset + mems_skip[i]);
-
- if (!dmabuf->eglimage[i])
+ dmabuf->eglimage[0] = _get_cached_eglimage (mems[0], 0);
+ if (dmabuf->eglimage[0])
+ return TRUE;
+
+ dmabuf->eglimage[0] =
+ gst_egl_image_from_dmabuf_singleplaner (dmabuf->upload->context,
+ mems, in_info, n_planes, mems_skip);
+ if (!dmabuf->eglimage[0])
return FALSE;
- _set_cached_eglimage (mems[i], dmabuf->eglimage[i], i);
+ _set_cached_eglimage (mems[0], dmabuf->eglimage[0], 0);
+ } else {
+ /* Now create an EGLImage for each dmabufs */
+ for (i = 0; i < n_planes; i++) {
+ /* check if one is cached */
+ dmabuf->eglimage[i] = _get_cached_eglimage (mems[i], i);
+ if (dmabuf->eglimage[i])
+ continue;
+
+ /* otherwise create one and cache it */
+ dmabuf->eglimage[i] =
+ gst_egl_image_from_dmabuf (dmabuf->upload->context,
+ gst_dmabuf_memory_get_fd (mems[i]), in_info, i,
+ mems[i]->offset + mems_skip[i]);
+
+ if (!dmabuf->eglimage[i])
+ return FALSE;
+
+ _set_cached_eglimage (mems[i], dmabuf->eglimage[i], i);
+ }
}
-#endif
return TRUE;
}
--
1.9.1
|