コード例 #1
0
static gboolean
_egueb_video_ope_provider_render_cb(OPEPlayer * player, gpointer event,
		gpointer data)
{
	Egueb_Video_Ope_Provider *thiz = data;
	OPEPlayerEventRender *ev = event;
	Enesim_Surface *surface;
	void *sw_data;
	size_t stride;

	if (ev->stream != thiz->stream)
		return EINA_TRUE;
	if (!thiz->width || !thiz->height)
		return EINA_TRUE;

	surface = enesim_surface_new(ENESIM_FORMAT_ARGB8888,
			thiz->width, thiz->height);
	enesim_surface_sw_data_get(surface, &sw_data, &stride);
	ope_stream_frame_rgb_get(ev->stream, OPE_STREAM_VIDEO_RGB_FORMAT_B8G8R8X8,
			thiz->width, thiz->height, sw_data, stride);

	/* lock the renderer */
	enesim_renderer_lock(thiz->image);
	/* set the new surface */
	enesim_renderer_image_source_surface_set(thiz->image, surface);
	/* unlock the renderer */
	enesim_renderer_unlock(thiz->image);
	return TRUE;
}
コード例 #2
0
ファイル: eon_escen_viewer.c プロジェクト: turran/eon
static void draw_ui(Escen_Viewer *thiz)
{
	Ender_Element *e;
	Enesim_Surface *s;
	Enesim_Renderer *r;

	/* add a stack with the enders, make it scrollable */
	e = eon_stack_new();
	/* TODO make it scrollable */
	eon_stack_orientation_set(e, EON_ORIENTATION_VERTICAL);
	eon_container_child_add(thiz->container, e);
	thiz->enders_stack = e;

	/* add another stack with the states of each escen */
	/* TODO make it scrollable */
	e = eon_stack_new();
	eon_stack_orientation_set(e, EON_ORIENTATION_VERTICAL);
	eon_container_child_add(thiz->container, e);
	thiz->states_stack = e;

	/* the scene area */
	e = eon_scrollview_new();
	thiz->scene_area_scrollview = e;
	eon_container_child_add(thiz->container, e);
	eon_stack_child_weight_set(thiz->container, e, 1);

	e = eon_surface_new();
	thiz->scene_area = e;

	/* TODO use the backend to create the surface */
	s = enesim_surface_new(ENESIM_FORMAT_ARGB8888, 640, 480);
	thiz->s = s;
	eon_surface_source_set(e, s);
	eon_element_vertical_alignment_set(e, EON_VERTICAL_ALIGNMENT_TOP);
	eon_element_horizontal_alignment_set(e, EON_HORIZONTAL_ALIGNMENT_LEFT);
	eon_container_child_add(thiz->scene_area_scrollview, e);

	r = enesim_renderer_checker_new();
	enesim_renderer_checker_even_color_set(r, 0xffcccccc);
	enesim_renderer_checker_odd_color_set(r, 0xffffffff);
	enesim_renderer_checker_width_set(r, 10);
	enesim_renderer_checker_height_set(r, 10);
	enesim_renderer_rop_set(r, ENESIM_FILL);
	thiz->checker = r;

	r = enesim_renderer_compound_new();
	enesim_renderer_compound_layer_add(r, thiz->checker);
	enesim_renderer_rop_set(r, ENESIM_FILL);
	thiz->compound = r;

	/* set the default state */
	thiz->current_escen_ender = escen_ender_nth_get(thiz->escen, 0);
	thiz->current_instance = escen_instance_new(thiz->current_escen_ender, EINA_TRUE);
	escen_instance_state_set(thiz->current_instance, escen_ender_state_get(thiz->current_escen_ender, "default"));
	thiz->current_ender = escen_instance_ender_get(thiz->current_instance);
	thiz->current_renderer = ender_element_object_get(thiz->current_ender);

	/* FIXME we should not set this */
	enesim_renderer_rop_set(thiz->current_renderer, ENESIM_BLEND);
	enesim_renderer_compound_layer_add(thiz->compound, thiz->current_renderer);

	/* populate the radio buttons */
	populate_enders(thiz, thiz->enders_stack, thiz->escen);
	populate_states(thiz, thiz->states_stack, thiz->current_escen_ender);
}
コード例 #3
0
ファイル: enesim_draw_cache01.c プロジェクト: bluezery/enesim
int main(void)
{
	Enesim_Renderer *r;
	Enesim_Surface *s;
	Enesim_Draw_Cache *cache;
	Enesim_Buffer_Sw_Data sw_data_cache;
	Eina_Rectangle area, geom;
	uint8_t *dst;
	uint8_t *src;
	size_t stride;
	int i;

	enesim_init();
	r = enesim_renderer_circle_new();
	enesim_renderer_circle_x_set(r, 128);
	enesim_renderer_circle_y_set(r, 128);
	enesim_renderer_circle_radius_set(r, 64);
	enesim_renderer_shape_fill_color_set(r, 0xffff0000);
	enesim_renderer_shape_draw_mode_set(r, ENESIM_RENDERER_SHAPE_DRAW_MODE_FILL);

	cache = enesim_draw_cache_new();
	enesim_draw_cache_renderer_set(cache, r);

	/* try to map the area at 0, 0, 64, 64 */
	eina_rectangle_coords_from(&area, 0, 0, 64, 64);
	if (!enesim_draw_cache_map_sw(cache, &area, &sw_data_cache, ENESIM_FORMAT_ARGB8888, NULL))
		goto failed_mapping;

	/* try to map the area at 64, 64, 128, 128 */
	eina_rectangle_coords_from(&area, 64, 64, 128, 128);
	if (!enesim_draw_cache_map_sw(cache, &area, &sw_data_cache, ENESIM_FORMAT_ARGB8888, NULL))
		goto failed_mapping;

	/* now map again the first area, in theory we should not draw anymore */
	eina_rectangle_coords_from(&area, 0, 0, 64, 64);
	if (!enesim_draw_cache_map_sw(cache, &area, &sw_data_cache, ENESIM_FORMAT_ARGB8888, NULL))
		goto failed_mapping;
	src = sw_data_cache.argb8888.plane0;

	/* get the geometry */
	enesim_draw_cache_geometry_get(cache, &geom);
	printf("creating a surface of size %d %d\n", geom.w, geom.h);
	s = enesim_surface_new(ENESIM_FORMAT_ARGB8888,
			geom.w, geom.h);

	enesim_surface_sw_data_get(s, (void **)&dst, &stride);
	for (i = 0; i < 128; i++)
	{
		memcpy(dst, src, stride);
		dst += stride;
		src += stride;
	}


	enesim_image_file_save("enesim_draw_cache01_0x0_64x64.png", s, NULL);
	enesim_surface_unref(s);
failed_mapping:
	enesim_draw_cache_free(cache);
	enesim_shutdown();

	return 0;
}