1 #include "emotion_gstreamer.h"
4 _evas_video_bgrx_step(unsigned char *evas_data, const unsigned char *gst_data,
5 unsigned int w, unsigned int h __UNUSED__, unsigned int output_height, unsigned int step)
10 for (y = 0; y < output_height; ++y)
12 for (x = 0; x < w; x++)
14 evas_data[0] = gst_data[0];
15 evas_data[1] = gst_data[1];
16 evas_data[2] = gst_data[2];
25 _evas_video_bgr(unsigned char *evas_data, const unsigned char *gst_data, unsigned int w, unsigned int h, unsigned int output_height)
27 _evas_video_bgrx_step(evas_data, gst_data, w, h, output_height, 3);
31 _evas_video_bgrx(unsigned char *evas_data, const unsigned char *gst_data, unsigned int w, unsigned int h, unsigned int output_height)
33 _evas_video_bgrx_step(evas_data, gst_data, w, h, output_height, 4);
37 _evas_video_bgra(unsigned char *evas_data, const unsigned char *gst_data, unsigned int w, unsigned int h __UNUSED__, unsigned int output_height)
42 for (y = 0; y < output_height; ++y)
46 for (x = 0; x < w; ++x)
49 evas_data[0] = (gst_data[0] * alpha) / 255;
50 evas_data[1] = (gst_data[1] * alpha) / 255;
51 evas_data[2] = (gst_data[2] * alpha) / 255;
60 _evas_video_i420(unsigned char *evas_data, const unsigned char *gst_data, unsigned int w, unsigned int h __UNUSED__, unsigned int output_height)
62 const unsigned char **rows;
68 rows = (const unsigned char **)evas_data;
70 for (i = 0; i < rh; i++)
71 rows[i] = &gst_data[i * w];
73 for (j = 0; j < (rh / 2); j++, i++)
74 rows[i] = &gst_data[h * w + j * (w / 2)];
76 for (j = 0; j < (rh / 2); j++, i++)
77 rows[i] = &gst_data[h * w + rh * (w / 4) + j * (w / 2)];
81 _evas_video_yv12(unsigned char *evas_data, const unsigned char *gst_data, unsigned int w, unsigned int h __UNUSED__, unsigned int output_height)
83 const unsigned char **rows;
89 rows = (const unsigned char **)evas_data;
91 for (i = 0; i < rh; i++)
92 rows[i] = &gst_data[i * w];
94 for (j = 0; j < (rh / 2); j++, i++)
95 rows[i] = &gst_data[h * w + rh * (w / 4) + j * (w / 2)];
97 for (j = 0; j < (rh / 2); j++, i++)
98 rows[i] = &gst_data[h * w + j * (w / 2)];
102 _evas_video_yuy2(unsigned char *evas_data, const unsigned char *gst_data, unsigned int w, unsigned int h __UNUSED__, unsigned int output_height)
104 const unsigned char **rows;
107 rows = (const unsigned char **)evas_data;
109 for (i = 0; i < output_height; i++)
110 rows[i] = &gst_data[i * w * 2];
114 _evas_video_nv12(unsigned char *evas_data, const unsigned char *gst_data, unsigned int w, unsigned int h __UNUSED__, unsigned int output_height)
116 const unsigned char **rows;
122 rows = (const unsigned char **)evas_data;
124 for (i = 0; i < rh; i++)
125 rows[i] = &gst_data[i * w];
127 for (j = 0; j < (rh / 2); j++, i++)
128 rows[i] = &gst_data[rh * w + j * w];
132 _evas_video_mt12(unsigned char *evas_data, const unsigned char *gst_data, unsigned int w, unsigned int h, unsigned int output_height __UNUSED__)
134 const unsigned char **rows;
138 rows = (const unsigned char **)evas_data;
140 for (i = 0; i < (h / 32) / 2; i++)
141 rows[i] = &gst_data[i * w * 2 * 32];
145 rows[i] = &gst_data[i * w * 2 * 32];
149 for (j = 0; j < ((h / 2) / 32) / 2; ++j, ++i)
150 rows[i] = &gst_data[h * w + j * (w / 2) * 2 * 16];
154 _evas_video_st12_multiplane(unsigned char *evas_data, const unsigned char *gst_data, unsigned int w, unsigned int h, unsigned int output_height __UNUSED__)
156 const GstMultiPlaneImageBuffer *mp_buf = (const GstMultiPlaneImageBuffer *) gst_data;
157 const unsigned char **rows;
161 rows = (const unsigned char **)evas_data;
163 for (i = 0; i < (h / 32) / 2; i++)
164 rows[i] = mp_buf->uaddr[0] + i * w * 2 * 32;
167 rows[i] = mp_buf->uaddr[0] + i * w * 2 * 32;
171 for (j = 0; j < ((h / 2) / 16) / 2; j++, i++)
173 rows[i] = mp_buf->uaddr[1] + j * w * 2 * 16 * 2;
175 if (((h / 2) / 16) % 2)
176 rows[i] = mp_buf->uaddr[1] + j * w * 2 * 16 * 2;
180 _evas_video_st12(unsigned char *evas_data, const unsigned char *gst_data, unsigned int w __UNUSED__, unsigned int h, unsigned int output_height __UNUSED__)
182 const SCMN_IMGB *imgb = (const SCMN_IMGB *) gst_data;
183 const unsigned char **rows;
186 rows = (const unsigned char **)evas_data;
188 for (i = 0; i < (h / 32) / 2; i++)
189 rows[i] = imgb->uaddr[0] + i * imgb->stride[0] * 2 * 32;
192 rows[i] = imgb->uaddr[0] + i * imgb->stride[0] * 2 * 32;
196 for (j = 0; j < (unsigned int) imgb->elevation[1] / 32 / 2; j++, i++)
197 rows[i] = imgb->uaddr[1] + j * imgb->stride[1] * 32 * 2;
198 if ((imgb->elevation[1] / 32) % 2)
199 rows[i++] = imgb->uaddr[1] + j * imgb->stride[1] * 32 * 2;
202 const ColorSpace_FourCC_Convertion colorspace_fourcc_convertion[] = {
203 { "I420", GST_MAKE_FOURCC('I', '4', '2', '0'), EVAS_COLORSPACE_YCBCR422P601_PL, _evas_video_i420, EINA_TRUE },
204 { "YV12", GST_MAKE_FOURCC('Y', 'V', '1', '2'), EVAS_COLORSPACE_YCBCR422P601_PL, _evas_video_yv12, EINA_TRUE },
205 { "YUY2", GST_MAKE_FOURCC('Y', 'U', 'Y', '2'), EVAS_COLORSPACE_YCBCR422601_PL, _evas_video_yuy2, EINA_FALSE },
206 { "NV12", GST_MAKE_FOURCC('N', 'V', '1', '2'), EVAS_COLORSPACE_YCBCR420NV12601_PL, _evas_video_nv12, EINA_TRUE },
207 { "TM12", GST_MAKE_FOURCC('T', 'M', '1', '2'), EVAS_COLORSPACE_YCBCR420TM12601_PL, _evas_video_mt12, EINA_TRUE },
208 { NULL, 0, 0, NULL, 0 }
211 const ColorSpace_Format_Convertion colorspace_format_convertion[] = {
212 { "BGR", GST_VIDEO_FORMAT_BGR, EVAS_COLORSPACE_ARGB8888, _evas_video_bgr },
213 { "BGRx", GST_VIDEO_FORMAT_BGRx, EVAS_COLORSPACE_ARGB8888, _evas_video_bgrx },
214 { "BGRA", GST_VIDEO_FORMAT_BGRA, EVAS_COLORSPACE_ARGB8888, _evas_video_bgra },