this patch contain following changes.
set pointers to NULL before use
return false when failed initializing controls
add more ASSERT macros
Change-Id: Id110981687047056085adc75ddbe48e90fa4cfbc
Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
static bool sm_GetMediaInfo(media_info_h media_h, void *dt);
public:
static bool sm_GetMediaInfo(media_info_h media_h, void *dt);
public:
- CMediaData(void);
- virtual ~CMediaData(void);
+ CMediaData(void) : m(0) {}
+ virtual ~CMediaData(void) {}
bool Create(const char *path);
void Destroy(void);
bool Create(const char *path);
void Destroy(void);
- void m_ControlInit(SPlayerParam *param);
+ bool m_ControlInit(SPlayerParam *param);
bool m_UiInit(void);
bool m_AddControls(void);
void m_UpdateInfoBar(void);
bool m_UiInit(void);
bool m_AddControls(void);
void m_UpdateInfoBar(void);
#define MAX_CONTROL_BTNS 6
#define MAX_CONTROL_BTNS 6
struct _event_cb {
void (*func)(void *data, const char *ev);
void *data;
struct _event_cb {
void (*func)(void *data, const char *ev);
void *data;
void CVideoController::sm_CbEvent(void *dt, Evas_Object *obj,
const char *emission, const char *source)
{
void CVideoController::sm_CbEvent(void *dt, Evas_Object *obj,
const char *emission, const char *source)
{
- struct SControlData *data;
+ struct SControlData *data;
data = (SControlData *)dt;
data = (SControlData *)dt;
data->cb.func(data->cb.data, source);
}
data->cb.func(data->cb.data, source);
}
Evas_Object *CVideoController::m_AddButton(const char *style)
{
Evas_Object *CVideoController::m_AddButton(const char *style)
{
Evas_Object *btn;
btn = elm_button_add(m->base);
Evas_Object *btn;
btn = elm_button_add(m->base);
int CVideoController::m_AddControls(const char **btns, int count)
{
int CVideoController::m_AddControls(const char **btns, int count)
{
m = new SControlData;
if (!m) {
m = new SControlData;
if (!m) {
- _ERR("failed to add slider");
+ _ERR("allocation failed");
void CVideoController::OnMouseMove(int id, Evas *e, Evas_Object *obj,
Evas_Event_Mouse_Move *ev)
{
void CVideoController::OnMouseMove(int id, Evas *e, Evas_Object *obj,
Evas_Event_Mouse_Move *ev)
{
if (!elm_object_focus_get(obj))
elm_object_focus_set(obj, EINA_TRUE);
if (!elm_object_focus_get(obj))
elm_object_focus_set(obj, EINA_TRUE);
void CVideoController::OnMouseClicked(int id, Evas_Object *obj)
{
void CVideoController::OnMouseClicked(int id, Evas_Object *obj)
{
elm_object_signal_emit(obj, SIG_BTN_ANI_START, "");
}
elm_object_signal_emit(obj, SIG_BTN_ANI_START, "");
}
-CMediaData::CMediaData(void)
-{
- m = NULL;
- media_content_connect();
-}
-
-CMediaData::~CMediaData(void)
-{
- media_content_disconnect();
-}
-
bool CMediaData::sm_GetMediaInfo(media_info_h media_h, void *dt)
{
bool CMediaData::sm_GetMediaInfo(media_info_h media_h, void *dt)
{
SMediaData *md;
md = (SMediaData *)dt;
SMediaData *md;
md = (SMediaData *)dt;
media_info_get_modified_time(media_h, &md->time);
md->video = new CVideoData;
media_info_get_modified_time(media_h, &md->time);
md->video = new CVideoData;
- md->video->Update(media_h);
+ if (md->video)
+ md->video->Update(media_h);
m = new SMediaData;
if (!m) {
_ERR("allocation failed");
m = new SMediaData;
if (!m) {
_ERR("allocation failed");
+ media_filter_destroy(filter);
+ m->name = NULL;
+ m->path = NULL;
+ m->video = NULL;
+
+ media_content_connect();
+
r = media_info_foreach_media_from_db(filter, sm_GetMediaInfo, m);
if (r != MEDIA_CONTENT_ERROR_NONE) {
_ERR("MEDIA CONTENT ERROR: %d", r);
media_filter_destroy(filter);
r = media_info_foreach_media_from_db(filter, sm_GetMediaInfo, m);
if (r != MEDIA_CONTENT_ERROR_NONE) {
_ERR("MEDIA CONTENT ERROR: %d", r);
media_filter_destroy(filter);
+ media_content_disconnect();
+ media_content_disconnect();
+
free(m->name);
free(m->path);
delete m->video;
free(m->name);
free(m->path);
delete m->video;
+ m->player = NULL;
+ m->ffrew_timer = NULL;
m->display_mode = E_FULL_SCREEN;
m->audio_effect = 0;
m->rew_speed = 0;
m->display_mode = E_FULL_SCREEN;
m->audio_effect = 0;
m->rew_speed = 0;
if (!m->media_list) {
_ERR("play list is null");
delete m;
if (!m->media_list) {
_ERR("play list is null");
delete m;
if (player_create(&m->player) != PLAYER_ERROR_NONE) {
_ERR("PLAYER CREATION ERROR");
delete m;
if (player_create(&m->player) != PLAYER_ERROR_NONE) {
_ERR("PLAYER CREATION ERROR");
delete m;
bool CPlayer::m_Play(const char *path)
{
bool CPlayer::m_Play(const char *path)
{
ASSERT(m->player);
int r;
ASSERT(m->player);
int r;
- if (player_set_uri(m->player, path) != PLAYER_ERROR_NONE) {
- _ERR("PLAYER SET URI ERROR");
+ r = player_set_uri(m->player, path);
+ if (r != PLAYER_ERROR_NONE) {
+ _ERR("PLAYER SET URI ERROR: %d", r);
return r;
path = GetPath();
return r;
path = GetPath();
- if (!path) {
- _ERR("video path is NULL");
- return false;
- }
const char *CPlayer::GetPath(void)
{
ASSERT(m);
const char *CPlayer::GetPath(void)
{
ASSERT(m);
- if (!m->media_list) {
- _ERR("invalid parameter");
- return NULL;
- }
-
path = (const char *)eina_list_nth(m->media_list, m->current);
path = (const char *)eina_list_nth(m->media_list, m->current);
return path;
}
bool CPlayer::Pause(void)
{
return path;
}
bool CPlayer::Pause(void)
{
- player_state_e state;
-
ASSERT(m);
ASSERT(m->player);
ASSERT(m);
ASSERT(m->player);
+ player_state_e state;
+
GetState(&state);
if (state == PLAYER_STATE_PAUSED)
return true;
GetState(&state);
if (state == PLAYER_STATE_PAUSED)
return true;
bool CPlayer::Resume(void)
{
bool CPlayer::Resume(void)
{
- player_state_e state;
-
ASSERT(m);
ASSERT(m->player);
ASSERT(m);
ASSERT(m->player);
+ player_state_e state;
+
GetState(&state);
if (state == PLAYER_STATE_PLAYING)
return true;
GetState(&state);
if (state == PLAYER_STATE_PLAYING)
return true;
Eina_Bool CPlayer::sm_CbFFRew(void *dt)
{
Eina_Bool CPlayer::sm_CbFFRew(void *dt)
{
CPlayer *p;
SPlayerData *m;
int pos;
CPlayer *p;
SPlayerData *m;
int pos;
- if (!dt)
- return ECORE_CALLBACK_CANCEL;
-
p = (CPlayer *)dt;
m = p->m;
p = (CPlayer *)dt;
m = p->m;
Eina_Bool CVideoSlider::sm_CbSeekSet(void *dt)
{
Eina_Bool CVideoSlider::sm_CbSeekSet(void *dt)
{
- if (!dt)
- return ECORE_CALLBACK_CANCEL;
data = (SSliderData *)dt;
data = (SSliderData *)dt;
void CVideoSlider::sm_CbSeekComplete(void *dt)
{
void CVideoSlider::sm_CbSeekComplete(void *dt)
{
SSliderData *data;
char str[32];
int pos;
bool r;
update_action action;
SSliderData *data;
char str[32];
int pos;
bool r;
update_action action;
data = (SSliderData *)dt;
if (data->pos != -1) {
data = (SSliderData *)dt;
if (data->pos != -1) {
Eina_Bool CVideoSlider::sm_CbTimer(void *dt)
{
Eina_Bool CVideoSlider::sm_CbTimer(void *dt)
{
SSliderData *data;
int pos;
bool r;
char str[32];
SSliderData *data;
int pos;
bool r;
char str[32];
- if (!dt)
- return ECORE_CALLBACK_CANCEL;
-
data = (SSliderData *)dt;
if (!data->player)
data = (SSliderData *)dt;
if (!data->player)
m = new SSliderData;
if (!m) {
m = new SSliderData;
if (!m) {
- _ERR("failed to add slider");
+ _ERR("allocation fail");
return false;
}
slider = elm_slider_add(base);
if (!slider) {
_ERR("failed to add slider");
return false;
}
slider = elm_slider_add(base);
if (!slider) {
_ERR("failed to add slider");
+ delete m;
+ m = NULL;
+ return false;
}
elm_slider_indicator_show_set(slider, EINA_FALSE);
}
elm_slider_indicator_show_set(slider, EINA_FALSE);
void CVideoSlider::m_SeekEnd(Evas_Object *obj)
{
void CVideoSlider::m_SeekEnd(Evas_Object *obj)
{
int v;
v = elm_slider_value_get(obj);
int v;
v = elm_slider_value_get(obj);
void CVideoSlider::OnKeyDown(int id, Evas *e, Evas_Object *obj,
Evas_Event_Key_Down *ev)
{
void CVideoSlider::OnKeyDown(int id, Evas *e, Evas_Object *obj,
Evas_Event_Key_Down *ev)
{
if (strcmp(ev->keyname, KEY_RIGHT) &&
strcmp(ev->keyname, KEY_LEFT))
return;
if (strcmp(ev->keyname, KEY_RIGHT) &&
strcmp(ev->keyname, KEY_LEFT))
return;
void CVideoSlider::OnKeyUp(int id, Evas *e, Evas_Object *obj,
Evas_Event_Key_Up *ev)
{
void CVideoSlider::OnKeyUp(int id, Evas *e, Evas_Object *obj,
Evas_Event_Key_Up *ev)
{
if (strcmp(ev->keyname, KEY_RIGHT) &&
strcmp(ev->keyname, KEY_LEFT))
return;
if (strcmp(ev->keyname, KEY_RIGHT) &&
strcmp(ev->keyname, KEY_LEFT))
return;
void CVideoSlider::OnMouseDown(int id, Evas *e, Evas_Object *obj,
Evas_Event_Mouse_Down *ev)
{
void CVideoSlider::OnMouseDown(int id, Evas *e, Evas_Object *obj,
Evas_Event_Mouse_Down *ev)
{
m_SeekStart(obj);
}
void CVideoSlider::OnMouseUp(int id, Evas *e, Evas_Object *obj,
Evas_Event_Mouse_Up *ev)
{
m_SeekStart(obj);
}
void CVideoSlider::OnMouseUp(int id, Evas *e, Evas_Object *obj,
Evas_Event_Mouse_Up *ev)
{
m_SeekEnd(obj);
}
void CVideoSlider::OnMouseMove(int id, Evas *e, Evas_Object *obj,
Evas_Event_Mouse_Move *ev)
{
m_SeekEnd(obj);
}
void CVideoSlider::OnMouseMove(int id, Evas *e, Evas_Object *obj,
Evas_Event_Mouse_Move *ev)
{
if (!elm_object_focus_get(obj))
elm_object_focus_set(obj, EINA_TRUE);
if (!elm_object_focus_get(obj))
elm_object_focus_set(obj, EINA_TRUE);
void CVideoSlider::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
{
void CVideoSlider::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
{
elm_object_signal_emit(m->base, SIG_SLIDER_FOCUS, "");
}
void CVideoSlider::OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item)
{
elm_object_signal_emit(m->base, SIG_SLIDER_FOCUS, "");
}
void CVideoSlider::OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item)
{
elm_object_signal_emit(m->base, SIG_SLIDER_UNFOCUS, "");
}
elm_object_signal_emit(m->base, SIG_SLIDER_UNFOCUS, "");
}
/* Source */
/* FIXME: when usb path is decided, this logic should be changed */
path = m->mediadata->GetPath();
/* Source */
/* FIXME: when usb path is decided, this logic should be changed */
path = m->mediadata->GetPath();
- if (path) {
- if (!strncmp(path, SOURCE_TV_PATH, SOURCE_PATH_LEN))
- source = SOURCE_TV;
- else
- source = SOURCE_USB;
- elm_object_part_text_set(m->base, PART_SOURCETEXT, _(source));
- }
+ if (!strncmp(path, SOURCE_TV_PATH, SOURCE_PATH_LEN))
+ source = SOURCE_TV;
+ else
+ source = SOURCE_USB;
+ elm_object_part_text_set(m->base, PART_SOURCETEXT, _(source));
/* Playlist Count */
snprintf(buf, sizeof(buf), "%d/%d",
/* Playlist Count */
snprintf(buf, sizeof(buf), "%d/%d",
bool r;
r = m->player->Play();
bool r;
r = m->player->Play();
- if (r < 0)
- return false;
path = m->player->GetPath();
path = m->player->GetPath();
timeout_handler_reset(m->timeout_handle);
}
timeout_handler_reset(m->timeout_handle);
}
}
void CPlayerView::sm_EvtRewindBtn(void *dt)
}
void CPlayerView::sm_EvtRewindBtn(void *dt)
m->control->AddHandler(sm_EvtControlBtn, m);
m->control->AddHandler(sm_EvtControlBtn, m);
- if (!m->slider->Create(m->base, m->player))
+ if (!m->slider->Create(m->base, m->player)) {
+ m->control->Destroy();
- if (!m->volume->Create(m->win))
+ if (!m->volume->Create(m->win)) {
+ m->control->Destroy();
+ m->slider->Destroy();
m->timeout_handle = timeout_handler_init(TIMEOUT_VIDEOPLAYER,
sm_CbTimeoutEvent, m, sm_CbEcoreEvent, m);
m->timeout_handle = timeout_handler_init(TIMEOUT_VIDEOPLAYER,
sm_CbTimeoutEvent, m, sm_CbEcoreEvent, m);
+ if (!m->timeout_handle) {
+ m->control->Destroy();
+ m->slider->Destroy();
+ m->volume->Destroy();
+ return false;
+ }
eext_object_event_callback_add(m->base,
EEXT_CALLBACK_BACK, sm_EvtBack, m);
eext_object_event_callback_add(m->base,
EEXT_CALLBACK_BACK, sm_EvtBack, m);
- if (!m->timeout_handle)
- return false;
-
return ECORE_CALLBACK_CANCEL;
}
return ECORE_CALLBACK_CANCEL;
}
-void CPlayerView::m_ControlInit(SPlayerParam *param)
+bool CPlayerView::m_ControlInit(SPlayerParam *param)
m->mediadata = new CMediaData;
m->mediadata = new CMediaData;
_ERR("mediadata init failed");
_ERR("mediadata init failed");
if (param->id)
m->id = strdup(param->id);
m->player = new CPlayer;
if (param->id)
m->id = strdup(param->id);
m->player = new CPlayer;
_ERR("player init failed");
_ERR("player init failed");
-
- r = m->player->Create(m->win, param->filepath, param->playlist);
- if (!r)
- _ERR("player creation failed");
m->control = new CVideoController;
m->control = new CVideoController;
_ERR("control init failed");
_ERR("control init failed");
_ERR("volume init failed");
_ERR("volume init failed");
m->slider = new CVideoSlider;
m->slider = new CVideoSlider;
_ERR("slider init failed");
_ERR("slider init failed");
+ return false;
+ }
+
+ return true;
}
bool CPlayerView::m_UiInit(void)
}
bool CPlayerView::m_UiInit(void)
ASSERT(data);
Evas_Object *win;
ASSERT(data);
Evas_Object *win;
bool r;
win = CViewMgr::GetInstance()->Window();
bool r;
win = CViewMgr::GetInstance()->Window();
+ m->player = NULL;
+ m->volume = NULL;
+ m->control = NULL;
+ m->slider = NULL;
+ m->mediadata = NULL;
+ m->timeout_handle = NULL;
+ m->drawanim_timer = NULL;
+
+ param = (SPlayerParam *)data;
- m_ControlInit((SPlayerParam *)data);
+ r = m_ControlInit(param);
+ if (!r) {
+ _ERR("failed to init Controls");
+ goto err;
+ }
r = m_UiInit();
if (!r) {
_ERR("failed to init UI");
r = m_UiInit();
if (!r) {
_ERR("failed to init UI");
+ goto err_control;
+ }
+
+ r = m->player->Create(m->win, param->filepath, param->playlist);
+ if (!r) {
+ _ERR("player creation failed");
+ goto err_control;
+ r = m_PlayerInit();
+ if (!r) {
_ERR("failed to play video");
_ERR("failed to play video");
}
m->player->SetCompletedCb(sm_CbPlayComplete, m);
}
m->player->SetCompletedCb(sm_CbPlayComplete, m);
+err_player:
+ m->player->Destroy();
+err_control:
+ m->control->Destroy();
+ m->slider->Destroy();
+ m->volume->Destroy();
err:
m_Fini();
return false;
err:
m_Fini();
return false;
void CPlayerView::m_Fini(void)
{
ecore_timer_del(m->drawanim_timer);
void CPlayerView::m_Fini(void)
{
ecore_timer_del(m->drawanim_timer);
- m->drawanim_timer = NULL;
- m->mediadata = NULL;
-
- m->player->Destroy();
- delete m->player;
- m->player = NULL;
timeout_handler_fini(m->timeout_handle);
timeout_handler_fini(m->timeout_handle);
- m->timeout_handle = NULL;
- m->volume = NULL;
-
- m->control->Destroy();
- m->control = NULL;
-
- m->slider->Destroy();
+ m->player->Destroy();
+ m->volume->Destroy();
+ m->control->Destroy();
+ m->slider->Destroy();
+
+ sound_manager_set_volume(SOUND_TYPE_MEDIA, 0);
} else {
sound_manager_set_volume(SOUND_TYPE_MEDIA, m->volume);
}
} else {
sound_manager_set_volume(SOUND_TYPE_MEDIA, m->volume);
}
- if (!m->bar)
- return;
-
r = sound_manager_get_volume(SOUND_TYPE_MEDIA, &vol);
if (r != SOUND_MANAGER_ERROR_NONE) {
_ERR("get volume error");
r = sound_manager_get_volume(SOUND_TYPE_MEDIA, &vol);
if (r != SOUND_MANAGER_ERROR_NONE) {
_ERR("get volume error");
Eina_Bool CVolume::sm_CbTimer(void *dt)
{
Eina_Bool CVolume::sm_CbTimer(void *dt)
{
- if (!dt)
- return ECORE_CALLBACK_CANCEL;
data = (SVolumeData *)dt;
data = (SVolumeData *)dt;
Evas_Object *ly;
Evas_Object *bar;
Evas_Object *ly;
Evas_Object *bar;
- m = new SVolumeData;
- if (!m) {
- _ERR("allocation fail");
- return false;
- }
-
ly = elm_layout_add(base);
ly = elm_layout_add(base);
elm_layout_file_set(ly, EDJEFILE, GRP_VOLUME);
elm_win_resize_object_add(base, ly);
elm_layout_file_set(ly, EDJEFILE, GRP_VOLUME);
elm_win_resize_object_add(base, ly);
bar = elm_progressbar_add(ly);
if (!bar) {
_ERR("failed to create progressbar");
bar = elm_progressbar_add(ly);
if (!bar) {
_ERR("failed to create progressbar");
evas_object_del(ly);
return false;
}
evas_object_del(ly);
return false;
}
elm_object_part_content_set(ly, PART_VOLUME_BAR, bar);
evas_object_show(bar);
elm_object_part_content_set(ly, PART_VOLUME_BAR, bar);
evas_object_show(bar);
+ m = new SVolumeData;
+ if (!m) {
+ _ERR("allocation fail");
+ evas_object_del(ly);
+ return false;
+ }
+
m->ly = ly;
m->bar = bar;
m->ly = ly;
m->bar = bar;
sound_manager_set_session_type(SOUND_SESSION_TYPE_EXCLUSIVE);
sound_manager_set_session_type(SOUND_SESSION_TYPE_EXCLUSIVE);
ASSERT(m);
ecore_timer_del(m->timer);
ASSERT(m);
ecore_timer_del(m->timer);