|
|
|
@ -16,60 +16,40 @@ static int done = 0; |
|
|
|
|
|
|
|
|
|
/* private data */ |
|
|
|
|
static Evas_Object *o_images[1]; |
|
|
|
|
static unsigned char *yp = NULL, *up = NULL, *vp = NULL; |
|
|
|
|
static Eina_Slice slice[3]; |
|
|
|
|
|
|
|
|
|
/* setup */ |
|
|
|
|
static void _setup(void) |
|
|
|
|
{ |
|
|
|
|
int i, y; |
|
|
|
|
int stride; |
|
|
|
|
FILE *f; |
|
|
|
|
unsigned char **data, **lp; |
|
|
|
|
Evas_Object *o; |
|
|
|
|
Eina_Slice slice; |
|
|
|
|
|
|
|
|
|
for (i = 0; i < 1; i++) |
|
|
|
|
int w = 320 - 16; |
|
|
|
|
for (int i = 0; i < 1; i++) |
|
|
|
|
{ |
|
|
|
|
o = efl_add(EFL_CANVAS_IMAGE_CLASS, evas); |
|
|
|
|
Evas_Object *o = efl_add(EFL_CANVAS_IMAGE_CLASS, evas); |
|
|
|
|
o_images[i] = o; |
|
|
|
|
efl_image_content_hint_set(o, EVAS_IMAGE_CONTENT_HINT_DYNAMIC); |
|
|
|
|
efl_gfx_buffer_alpha_set(o, 0); |
|
|
|
|
efl_gfx_fill_set(o, 0, 0, 640, 480); |
|
|
|
|
efl_gfx_size_set(o, 640, 480); |
|
|
|
|
efl_gfx_visible_set(o, EINA_TRUE); |
|
|
|
|
data = malloc(sizeof (unsigned char*) * (480 + 240 + 240)); |
|
|
|
|
yp = malloc(640 * 480); |
|
|
|
|
up = malloc(320 * 240); |
|
|
|
|
vp = malloc(320 * 240); |
|
|
|
|
|
|
|
|
|
// in this test, the stride is 640 but the width changes
|
|
|
|
|
slice[0].len = 640 * 480; |
|
|
|
|
slice[1].len = 320 * 240; |
|
|
|
|
slice[2].len = 320 * 240; |
|
|
|
|
f = fopen(build_path("tp.yuv"), "rb"); |
|
|
|
|
if (f) |
|
|
|
|
if (!f) continue; |
|
|
|
|
stride = 640; |
|
|
|
|
for (int p = 0; p < 3; p++) |
|
|
|
|
{ |
|
|
|
|
fread(yp, 640 * 480, 1, f); |
|
|
|
|
fread(up, 320 * 240, 1, f); |
|
|
|
|
fread(vp, 320 * 240, 1, f); |
|
|
|
|
fclose(f); |
|
|
|
|
slice[p].mem = malloc(slice[p].len); |
|
|
|
|
fread((void *) slice[p].mem, slice[p].len, 1, f); |
|
|
|
|
efl_gfx_buffer_managed_set(o, &slice[p], w, 480, stride, |
|
|
|
|
EFL_GFX_COLORSPACE_YCBCR422P601_PL, p); |
|
|
|
|
stride = 320; |
|
|
|
|
} |
|
|
|
|
lp = data; |
|
|
|
|
for (y = 0; y < 480; y++) |
|
|
|
|
{ |
|
|
|
|
*lp = yp + (y * 640); |
|
|
|
|
lp++; |
|
|
|
|
} |
|
|
|
|
for (y = 0; y < 240; y++) |
|
|
|
|
{ |
|
|
|
|
*lp = up + (y * 320); |
|
|
|
|
lp++; |
|
|
|
|
} |
|
|
|
|
for (y = 0; y < 240; y++) |
|
|
|
|
{ |
|
|
|
|
*lp = vp + (y * 320); |
|
|
|
|
lp++; |
|
|
|
|
} |
|
|
|
|
slice = (Eina_Slice)EINA_SLICE_STR(*data); |
|
|
|
|
efl_gfx_buffer_managed_set(o_images[i], &slice, 640, 480, 0, EFL_GFX_COLORSPACE_YCBCR422P601_PL, 0); |
|
|
|
|
efl_gfx_buffer_update_add(o_images[i], 0, 0, 320, 480); |
|
|
|
|
free(yp); |
|
|
|
|
free(up); |
|
|
|
|
free(vp); |
|
|
|
|
fclose(f); |
|
|
|
|
} |
|
|
|
|
done = 0; |
|
|
|
|
} |
|
|
|
@ -77,11 +57,17 @@ static void _setup(void) |
|
|
|
|
/* cleanup */ |
|
|
|
|
static void _cleanup(void) |
|
|
|
|
{ |
|
|
|
|
int i; |
|
|
|
|
for (i = 0; i < 1; i++) efl_del(o_images[i]); |
|
|
|
|
/* free(yp); */ |
|
|
|
|
/* free(up); */ |
|
|
|
|
/* free(vp); */ |
|
|
|
|
for (int i = 0; i < 1; i++) |
|
|
|
|
{ |
|
|
|
|
Evas_Object *o = o_images[i]; |
|
|
|
|
for (int p = 0; p < 3; p++) |
|
|
|
|
{ |
|
|
|
|
efl_gfx_buffer_managed_set(o, NULL, 640, 480, 0, |
|
|
|
|
EFL_GFX_COLORSPACE_YCBCR422P601_PL, p); |
|
|
|
|
free((void *) slice[p].mem); |
|
|
|
|
} |
|
|
|
|
efl_del(o); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* loop - do things */ |
|
|
|
@ -89,47 +75,35 @@ static void _loop(double t, int f) |
|
|
|
|
{ |
|
|
|
|
int i; |
|
|
|
|
Evas_Coord x, y, w, h; |
|
|
|
|
Eina_Slice slice; |
|
|
|
|
for (i = 0; i < 1; i++) |
|
|
|
|
{ |
|
|
|
|
unsigned char **lp; |
|
|
|
|
Evas_Object *o = o_images[i]; |
|
|
|
|
Eina_Slice sl[3]; |
|
|
|
|
int stride; |
|
|
|
|
|
|
|
|
|
for (int p = 0; p < 3; p++) |
|
|
|
|
efl_gfx_buffer_managed_get(o, &sl[p], p); |
|
|
|
|
|
|
|
|
|
w = 640; |
|
|
|
|
h = 480; |
|
|
|
|
x = (win_w / 2) - (w / 2); |
|
|
|
|
y = (win_h / 2) - (h / 2); |
|
|
|
|
efl_gfx_position_set(o_images[i], x, y); |
|
|
|
|
efl_gfx_size_set(o_images[i], w, h); |
|
|
|
|
efl_gfx_fill_set(o_images[i], 0, 0, w, h); |
|
|
|
|
|
|
|
|
|
w = 320 - 16 + f; |
|
|
|
|
if (w < 1) w = 1; |
|
|
|
|
else if (w > 640) w = 640; |
|
|
|
|
efl_gfx_position_set(o, x, y); |
|
|
|
|
efl_gfx_size_set(o, w, h); |
|
|
|
|
efl_gfx_fill_set(o, 0, 0, w, h); |
|
|
|
|
|
|
|
|
|
w &= ~0x1; |
|
|
|
|
// logic here differs a bit from old expedite
|
|
|
|
|
w = 320 - 16 + (f * 2) % 336; |
|
|
|
|
if (w > 640) w = 320; |
|
|
|
|
|
|
|
|
|
slice.mem = malloc(sizeof (void*) * (480 + 240 + 240)); |
|
|
|
|
slice.len = (480 + 240 + 240); |
|
|
|
|
lp = slice.mem; |
|
|
|
|
for (y = 0; y < 480; y++) |
|
|
|
|
stride = 640; |
|
|
|
|
for (int p = 0; p < 3; p++) |
|
|
|
|
{ |
|
|
|
|
*lp = yp + (y * 640); |
|
|
|
|
lp++; |
|
|
|
|
efl_gfx_buffer_managed_set(o, &sl[p], w, 480, stride, |
|
|
|
|
EFL_GFX_COLORSPACE_YCBCR422P601_PL, p); |
|
|
|
|
stride = 320; |
|
|
|
|
} |
|
|
|
|
for (y = 0; y < 240; y++) |
|
|
|
|
{ |
|
|
|
|
*lp = up + (y * 320); |
|
|
|
|
lp++; |
|
|
|
|
} |
|
|
|
|
for (y = 0; y < 240; y++) |
|
|
|
|
{ |
|
|
|
|
*lp = vp + (y * 320); |
|
|
|
|
lp++; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* efl_gfx_buffer_copy_set(o_images[i], &slice, w, 480, w * sizeof (int), EVAS_COLORSPACE_YCBCR422P601_PL, 0); */ |
|
|
|
|
efl_gfx_buffer_update_add(o_images[i], 0, 0, w, 480); |
|
|
|
|
free(slice.mem); |
|
|
|
|
efl_gfx_buffer_update_add(o, 0, 0, w, 480); |
|
|
|
|
} |
|
|
|
|
FPS_STD(NAME); |
|
|
|
|
} |
|
|
|
|