projects
/
platform
/
core
/
uifw
/
libpui.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
default_backend: do not allocate frame whenever each frames
[platform/core/uifw/libpui.git]
/
backends
/
voice
/
default_ani_listening.c
diff --git
a/backends/voice/default_ani_listening.c
b/backends/voice/default_ani_listening.c
index
e1307e1
..
cc86e1a
100644
(file)
--- a/
backends/voice/default_ani_listening.c
+++ b/
backends/voice/default_ani_listening.c
@@
-25,6
+25,8
@@
#include "../default_backend.h"
#include "../default_backend.h"
+static default_frame_info_t *ani_frame = NULL;
+
static void
_ani_backend_listening_get_led_rgb(default_frame_info_t *frame, int led_idx, unsigned int *r, unsigned int *g, unsigned int *b)
{
static void
_ani_backend_listening_get_led_rgb(default_frame_info_t *frame, int led_idx, unsigned int *r, unsigned int *g, unsigned int *b)
{
@@
-37,33
+39,15
@@
_ani_backend_listening_get_led_rgb(default_frame_info_t *frame, int led_idx, uns
*b = (frame->leds[led_idx].color & LED_MASK_BLUE);
}
*b = (frame->leds[led_idx].color & LED_MASK_BLUE);
}
-static void
-_ani_backend_listening_free_frame(default_frame_info_t *frame)
-{
- if (!frame) return;
-
- if (frame->leds) free(frame->leds);
- free(frame);
-}
-
static default_frame_info_t *
_ani_backend_listening_get_frame(default_ani_info *ani_info)
{
static default_frame_info_t *
_ani_backend_listening_get_frame(default_ani_info *ani_info)
{
- default_frame_info_t *
frame, *
key_frame;
+ default_frame_info_t *key_frame;
int division;
int division;
- frame = (default_frame_info_t *)calloc(sizeof(default_frame_info_t), 1);
- if (!frame) return NULL;
-
key_frame = &ani_info->frames[0];
key_frame = &ani_info->frames[0];
- frame->num_led = key_frame->num_led;
- frame->leds = (default_led_info_t *)calloc(sizeof(default_led_info_t), frame->num_led);
- if (!frame->leds)
- {
- free(frame);
- return NULL;
- }
- division = (int)(frame->num_led / 2);
+
+ division = (int)(key_frame->num_led / 2);
for (int i = 0; i < key_frame->num_led; i++)
{
int idx;
for (int i = 0; i < key_frame->num_led; i++)
{
int idx;
@@
-94,7
+78,7
@@
_ani_backend_listening_get_frame(default_ani_info *ani_info)
if (idx >= key_frame->num_led) continue;
}
}
if (idx >= key_frame->num_led) continue;
}
}
- frame->leds[idx] = key_frame->leds[i];
+
ani_
frame->leds[idx] = key_frame->leds[i];
}
ani_info->frame_idx++;
if (ani_info->frame_idx >= key_frame->num_led)
}
ani_info->frame_idx++;
if (ani_info->frame_idx >= key_frame->num_led)
@@
-104,7
+88,7
@@
_ani_backend_listening_get_frame(default_ani_info *ani_info)
ani_info->frame_idx = 0;
}
ani_info->frame_idx = 0;
}
- return frame;
+ return
ani_
frame;
}
static pui_bool
}
static pui_bool
@@
-138,7
+122,7
@@
_ani_backend_listening_frame_cb(void *data, int serial)
buffer->ptr[4*i + 2] = g; /* GREEN */
buffer->ptr[4*i + 3] = r; /* RED */
}
buffer->ptr[4*i + 2] = g; /* GREEN */
buffer->ptr[4*i + 3] = r; /* RED */
}
-
_ani_backend_listening_free
_frame(frame);
+
backend_util_cleanup
_frame(frame);
e = pui_backend_ani_set_buffer(ani, buffer);
e = pui_backend_ani_set_buffer(ani, buffer);
@@
-188,6
+172,10
@@
_ani_listening_start(pui_ani_t *ani, int repeat)
info->frame_idx = 0;
info->repeat_cur = 0;
info->frame_idx = 0;
info->repeat_cur = 0;
+ if (!ani_frame)
+ ani_frame = backend_util_alloc_frame(info);
+ ERROR_CHECK(ani_frame, return PUI_INT_ERROR_INVALID_RESOURCES, "Failed to alloc memory for frame\n");
+
ret = pui_backend_ani_add_frame_cb(ani, _ani_backend_listening_frame_cb, info->interval / 1000.0);
if (!ret)
{
ret = pui_backend_ani_add_frame_cb(ani, _ani_backend_listening_frame_cb, info->interval / 1000.0);
if (!ret)
{
@@
-219,6
+207,12
@@
_ani_listening_stop(pui_ani_t *ani, pui_bool force)
else
pui_backend_ani_status_update(ani, PUI_ANI_STATUS_STOPPED);
else
pui_backend_ani_status_update(ani, PUI_ANI_STATUS_STOPPED);
+ if (ani_frame)
+ {
+ backend_util_free_frame(ani_frame);
+ ani_frame = NULL;
+ }
+
return e;
}
return e;
}