-_evas_video_bgrx_step(unsigned char *evas_data, const unsigned char *gst_data,
- unsigned int w, unsigned int h __UNUSED__, unsigned int output_height, unsigned int step)
-{
- unsigned int x;
- unsigned int y;
-
- for (y = 0; y < output_height; ++y)
- {
- for (x = 0; x < w; x++)
- {
- evas_data[0] = gst_data[0];
- evas_data[1] = gst_data[1];
- evas_data[2] = gst_data[2];
- evas_data[3] = 255;
- gst_data += step;
- evas_data += 4;
- }
- }
-}
-
-static void
-_evas_video_bgr(unsigned char *evas_data, const unsigned char *gst_data, unsigned int w, unsigned int h, unsigned int output_height)
-{
- _evas_video_bgrx_step(evas_data, gst_data, w, h, output_height, 3);
-}
-
-static void
-_evas_video_bgrx(unsigned char *evas_data, const unsigned char *gst_data, unsigned int w, unsigned int h, unsigned int output_height)
-{
- _evas_video_bgrx_step(evas_data, gst_data, w, h, output_height, 4);
-}
-
-static void
-_evas_video_bgra(unsigned char *evas_data, const unsigned char *gst_data, unsigned int w, unsigned int h __UNUSED__, unsigned int output_height)
-{
- unsigned int x;
- unsigned int y;
-
- for (y = 0; y < output_height; ++y)
- {
- unsigned char alpha;
-
- for (x = 0; x < w; ++x)
- {
- alpha = gst_data[3];
- evas_data[0] = (gst_data[0] * alpha) / 255;
- evas_data[1] = (gst_data[1] * alpha) / 255;
- evas_data[2] = (gst_data[2] * alpha) / 255;
- evas_data[3] = alpha;
- gst_data += 4;
- evas_data += 4;
- }
- }
-}
-
-static void
-_evas_video_i420(unsigned char *evas_data, const unsigned char *gst_data, unsigned int w, unsigned int h, unsigned int output_height)
-{
- const unsigned char **rows;
- unsigned int i, j;
- unsigned int rh;
-
- rh = output_height;
-
- rows = (const unsigned char **)evas_data;
-
- for (i = 0; i < rh; i++)
- rows[i] = &gst_data[i * w];
-
- for (j = 0; j < (rh / 2); j++, i++)
- rows[i] = &gst_data[h * w + j * (w / 2)];
-
- for (j = 0; j < (rh / 2); j++, i++)
- rows[i] = &gst_data[h * w + h * (w / 4) + j * (w / 2)];
- WRN("I420: %i (max: %i for height %i, real height = %i) = %p", i, 2 * h, h, rh, evas_data);
-}
-
-static void
-_evas_video_yv12(unsigned char *evas_data, const unsigned char *gst_data, unsigned int w, unsigned int h, unsigned int output_height)
-{
- const unsigned char **rows;
- unsigned int i, j;
- unsigned int rh;
-
- rh = output_height;
-
- rows = (const unsigned char **)evas_data;
-
- for (i = 0; i < rh; i++)
- rows[i] = &gst_data[i * w];
-
- for (j = 0; j < (rh / 2); j++, i++)
- rows[i] = &gst_data[h * w + h * (w / 4) + j * (w / 2)];
-
- for (j = 0; j < (rh / 2); j++, i++)
- rows[i] = &gst_data[h * w + j * (w / 2)];
- WRN("YV12: %i (max: %i for height %i, real height = %i) = %p", i, 2 * h, h, rh, evas_data);
-}
-
-static void
-_evas_video_yuy2(unsigned char *evas_data, const unsigned char *gst_data, unsigned int w, unsigned int h __UNUSED__, unsigned int output_height)
-{
- const unsigned char **rows;
- unsigned int i;
-
- rows = (const unsigned char **)evas_data;
-
- for (i = 0; i < output_height; i++)
- rows[i] = &gst_data[i * w * 2];
-}
-
-static void
-_evas_video_nv12(unsigned char *evas_data, const unsigned char *gst_data, unsigned int w, unsigned int h, unsigned int output_height)
-{
- const unsigned char **rows;
- unsigned int i, j;
- unsigned int rh;
-
- rh = output_height;
-
- rows = (const unsigned char **)evas_data;
-
- for (i = 0; i < rh; i++)
- rows[i] = &gst_data[i * w];
-
- for (j = 0; j < (rh / 2); j++, i++)
- rows[i] = &gst_data[h * w + j * w];
-}
-
-static void
-_evas_video_mt12(unsigned char *evas_data, const unsigned char *gst_data, unsigned int w, unsigned int h, unsigned int output_height __UNUSED__)
-{
- const unsigned char **rows;
- unsigned int i;
- unsigned int j;
-
- rows = (const unsigned char **)evas_data;
-
- for (i = 0; i < (h / 32) / 2; i++)
- rows[i] = &gst_data[i * w * 2 * 32];
-
- if ((h / 32) % 2)
- {
- rows[i] = &gst_data[i * w * 2 * 32];
- i++;
- }
-
- for (j = 0; j < ((h / 2) / 32) / 2; ++j, ++i)
- rows[i] = &gst_data[h * w + j * (w / 2) * 2 * 16];
-}
-
-static void
-_evas_video_st12_multiplane(unsigned char *evas_data, const unsigned char *gst_data, unsigned int w, unsigned int h, unsigned int output_height __UNUSED__)
-{
- const GstMultiPlaneImageBuffer *mp_buf = (const GstMultiPlaneImageBuffer *) gst_data;
- const unsigned char **rows;
- unsigned int i;
- unsigned int j;
-
- rows = (const unsigned char **)evas_data;
-
- for (i = 0; i < (h / 32) / 2; i++)
- rows[i] = mp_buf->uaddr[0] + i * w * 2 * 32;
- if ((h / 32) % 2)
- {
- rows[i] = mp_buf->uaddr[0] + i * w * 2 * 32;
- i++;
- }
-
- for (j = 0; j < ((h / 2) / 16) / 2; j++, i++)
- rows[i] = mp_buf->uaddr[1] + j * w * 2 * 16;
- if (((h / 2) / 16) % 2)
- rows[i] = mp_buf->uaddr[0] + j * w * 2 * 16;
-}
-
-static void
-_evas_video_st12(unsigned char *evas_data, const unsigned char *gst_data, unsigned int w, unsigned int h, unsigned int output_height __UNUSED__)
-{
- const SCMN_IMGB *imgb = (const SCMN_IMGB *) gst_data;
- const unsigned char **rows;
- unsigned int i, j;
-
- rows = (const unsigned char **)evas_data;
-
- for (i = 0; i < (h / 32) / 2; i++)
- rows[i] = imgb->uaddr[0] + i * w * 2 * 32;
- if ((h / 32) % 2)
- {
- rows[i] = imgb->uaddr[0] + i * w * 2 * 32;
- i++;
- }
-
- for (j = 0; j < ((h / 2) / 16) / 2; j++, i++)
- rows[i] = imgb->uaddr[1] + j * w * 2 * 16;
- if (((h / 2) / 16) % 2)
- rows[i] = imgb->uaddr[1] + j * w * 2 * 16;
-}
-
-static const struct {
- guint32 fourcc;
- Evas_Colorspace eformat;
- Evas_Video_Convert_Cb func;
- Eina_Bool force_height;
-} colorspace_fourcc_convertion[] = {
- { GST_MAKE_FOURCC('I', '4', '2', '0'), EVAS_COLORSPACE_YCBCR422P601_PL, _evas_video_i420, EINA_TRUE },
- { GST_MAKE_FOURCC('Y', 'V', '1', '2'), EVAS_COLORSPACE_YCBCR422P601_PL, _evas_video_yv12, EINA_TRUE },
- { GST_MAKE_FOURCC('Y', 'U', 'Y', '2'), EVAS_COLORSPACE_YCBCR422601_PL, _evas_video_yuy2, EINA_FALSE },
- { GST_MAKE_FOURCC('N', 'V', '1', '2'), EVAS_COLORSPACE_YCBCR420NV12601_PL, _evas_video_nv12, EINA_TRUE },
- { GST_MAKE_FOURCC('T', 'M', '1', '2'), EVAS_COLORSPACE_YCBCR420TM12601_PL, _evas_video_mt12, EINA_TRUE }
-};
-
-static const struct {
- GstVideoFormat format;
- Evas_Colorspace eformat;
- Evas_Video_Convert_Cb func;
-} colorspace_format_convertion[] = {
- { GST_VIDEO_FORMAT_BGR, EVAS_COLORSPACE_ARGB8888, _evas_video_bgr },
- { GST_VIDEO_FORMAT_BGRx, EVAS_COLORSPACE_ARGB8888, _evas_video_bgrx },
- { GST_VIDEO_FORMAT_BGRA, EVAS_COLORSPACE_ARGB8888, _evas_video_bgra }
-};
-
-static void