fix exception handling 05/38305/3 submit/tizen/20150419.212422
authorMinkyu Kang <mk7.kang@samsung.com>
Thu, 16 Apr 2015 08:01:37 +0000 (17:01 +0900)
committerMinkyu Kang <mk7.kang@samsung.com>
Fri, 17 Apr 2015 07:53:28 +0000 (16:53 +0900)
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>
include/mediadata.h
include/view_player.h
src/control.cpp
src/mediadata.cpp
src/playermgr.cpp
src/slider.cpp
src/view_player.cpp
src/volume.cpp

index ddfdbd3..493adcd 100644 (file)
@@ -27,8 +27,8 @@ private:
        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);
index 1a3b2f3..7e790f5 100644 (file)
@@ -38,7 +38,7 @@ private:
        SPlayerView *m;
 
 private:
-       void m_ControlInit(SPlayerParam *param);
+       bool m_ControlInit(SPlayerParam *param);
        bool m_UiInit(void);
        bool m_AddControls(void);
        void m_UpdateInfoBar(void);
index 583ca56..649c547 100644 (file)
@@ -27,8 +27,6 @@
 
 #define MAX_CONTROL_BTNS 6
 
-struct SControlData;
-
 struct _event_cb {
        void (*func)(void *data, const char *ev);
        void *data;
@@ -45,13 +43,11 @@ struct SControlData {
 void CVideoController::sm_CbEvent(void *dt, Evas_Object *obj,
                const char *emission, const char *source)
 {
-       struct SControlData *data;
+       ASSERT(dt);
 
-       if (!dt)
-               return;
+       struct SControlData *data;
 
        data = (SControlData *)dt;
-
        data->cb.func(data->cb.data, source);
 }
 
@@ -79,8 +75,6 @@ void CVideoController::m_SetFocusDirection(Evas_Object **btn, int count)
 
 Evas_Object *CVideoController::m_AddButton(const char *style)
 {
-       ASSERT(m);
-
        Evas_Object *btn;
 
        btn = elm_button_add(m->base);
@@ -95,8 +89,6 @@ Evas_Object *CVideoController::m_AddButton(const char *style)
 
 int CVideoController::m_AddControls(const char **btns, int count)
 {
-       ASSERT(m);
-
        int i;
        char buf[32];
 
@@ -136,7 +128,7 @@ bool CVideoController::Create(Evas_Object *base, const char **btns, int count)
 
        m = new SControlData;
        if (!m) {
-               _ERR("failed to add slider");
+               _ERR("allocation failed");
                return false;
        }
 
@@ -213,8 +205,7 @@ void CVideoController::Show(void)
 void CVideoController::OnMouseMove(int id, Evas *e, Evas_Object *obj,
                        Evas_Event_Mouse_Move *ev)
 {
-       if (!obj)
-               return;
+       ASSERT(obj);
 
        if (!elm_object_focus_get(obj))
                elm_object_focus_set(obj, EINA_TRUE);
@@ -222,5 +213,7 @@ void CVideoController::OnMouseMove(int id, Evas *e, Evas_Object *obj,
 
 void CVideoController::OnMouseClicked(int id, Evas_Object *obj)
 {
+       ASSERT(obj);
+
        elm_object_signal_emit(obj, SIG_BTN_ANI_START, "");
 }
index 94dcbfa..89e2294 100644 (file)
@@ -30,19 +30,10 @@ struct SMediaData {
        CVideoData *video;
 };
 
-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)
 {
+       ASSERT(dt);
+
        SMediaData *md;
 
        md = (SMediaData *)dt;
@@ -52,7 +43,8 @@ bool CMediaData::sm_GetMediaInfo(media_info_h media_h, void *dt)
        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);
 
        return true;
 }
@@ -84,13 +76,21 @@ bool CMediaData::Create(const char *path)
        m = new SMediaData;
        if (!m) {
                _ERR("allocation failed");
+               media_filter_destroy(filter);
                return false;
        }
 
+       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);
+               media_content_disconnect();
 
                delete m;
                m = NULL;
@@ -107,11 +107,12 @@ void CMediaData::Destroy(void)
 {
        ASSERT(m);
 
+       media_content_disconnect();
+
        free(m->name);
        free(m->path);
 
        delete m->video;
-       m->video = NULL;
 
        delete m;
        m = NULL;
index b18aab2..b2d4ecf 100644 (file)
@@ -117,6 +117,8 @@ bool CPlayer::Create(Evas_Object *win, const char *path, const char *playlist)
        }
 
        m->win = win;
+       m->player = NULL;
+       m->ffrew_timer = NULL;
        m->display_mode = E_FULL_SCREEN;
        m->audio_effect = 0;
        m->rew_speed = 0;
@@ -126,6 +128,8 @@ bool CPlayer::Create(Evas_Object *win, const char *path, const char *playlist)
        if (!m->media_list) {
                _ERR("play list is null");
                delete m;
+               m = NULL;
+
                return false;
        }
 
@@ -135,6 +139,8 @@ bool CPlayer::Create(Evas_Object *win, const char *path, const char *playlist)
        if (player_create(&m->player) != PLAYER_ERROR_NONE) {
                _ERR("PLAYER CREATION ERROR");
                delete m;
+               m = NULL;
+
                return false;
        }
 
@@ -163,13 +169,13 @@ void CPlayer::Destroy(void)
 
 bool CPlayer::m_Play(const char *path)
 {
-       ASSERT(m);
        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 false;
        }
 
@@ -222,10 +228,6 @@ bool CPlayer::Play(void)
                return r;
 
        path = GetPath();
-       if (!path) {
-               _ERR("video path is NULL");
-               return false;
-       }
 
        r = m_Play(path);
 
@@ -263,26 +265,23 @@ bool CPlayer::Next(bool repeat)
 const char *CPlayer::GetPath(void)
 {
        ASSERT(m);
+       ASSERT(m->media_list);
 
        const char *path;
 
-       if (!m->media_list) {
-               _ERR("invalid parameter");
-               return NULL;
-       }
-
        path = (const char *)eina_list_nth(m->media_list, m->current);
+       ASSERT(path);
 
        return path;
 }
 
 bool CPlayer::Pause(void)
 {
-       player_state_e state;
-
        ASSERT(m);
        ASSERT(m->player);
 
+       player_state_e state;
+
        GetState(&state);
        if (state == PLAYER_STATE_PAUSED)
                return true;
@@ -297,11 +296,11 @@ bool CPlayer::Pause(void)
 
 bool CPlayer::Resume(void)
 {
-       player_state_e state;
-
        ASSERT(m);
        ASSERT(m->player);
 
+       player_state_e state;
+
        GetState(&state);
        if (state == PLAYER_STATE_PLAYING)
                return true;
@@ -426,13 +425,12 @@ int CPlayer::GetCurrent(void)
 
 Eina_Bool CPlayer::sm_CbFFRew(void *dt)
 {
+       ASSERT(dt);
+
        CPlayer *p;
        SPlayerData *m;
        int pos;
 
-       if (!dt)
-               return ECORE_CALLBACK_CANCEL;
-
        p = (CPlayer *)dt;
        m = p->m;
 
index 8a873b1..dc9eefc 100644 (file)
@@ -53,10 +53,9 @@ static void _get_timestr(char *str, int size, unsigned int ms)
 
 Eina_Bool CVideoSlider::sm_CbSeekSet(void *dt)
 {
-       SSliderData *data;
+       ASSERT(dt);
 
-       if (!dt)
-               return ECORE_CALLBACK_CANCEL;
+       SSliderData *data;
 
        data = (SSliderData *)dt;
 
@@ -69,15 +68,14 @@ Eina_Bool CVideoSlider::sm_CbSeekSet(void *dt)
 
 void CVideoSlider::sm_CbSeekComplete(void *dt)
 {
+       ASSERT(dt);
+
        SSliderData *data;
        char str[32];
        int pos;
        bool r;
        update_action action;
 
-       if (!dt)
-               return;
-
        data = (SSliderData *)dt;
 
        if (data->pos != -1) {
@@ -106,14 +104,13 @@ void CVideoSlider::sm_CbSeekComplete(void *dt)
 
 Eina_Bool CVideoSlider::sm_CbTimer(void *dt)
 {
+       ASSERT(dt);
+
        SSliderData *data;
        int pos;
        bool r;
        char str[32];
 
-       if (!dt)
-               return ECORE_CALLBACK_CANCEL;
-
        data = (SSliderData *)dt;
 
        if (!data->player)
@@ -181,14 +178,16 @@ bool CVideoSlider::Create(Evas_Object *base, CPlayer *player)
 
        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 true;
+               delete m;
+               m = NULL;
+               return false;
        }
 
        elm_slider_indicator_show_set(slider, EINA_FALSE);
@@ -235,6 +234,8 @@ void CVideoSlider::m_SeekStart(Evas_Object *obj)
 
 void CVideoSlider::m_SeekEnd(Evas_Object *obj)
 {
+       ASSERT(m);
+
        int v;
 
        v = elm_slider_value_get(obj);
@@ -250,6 +251,8 @@ void CVideoSlider::m_SeekEnd(Evas_Object *obj)
 void CVideoSlider::OnKeyDown(int id, Evas *e, Evas_Object *obj,
                        Evas_Event_Key_Down *ev)
 {
+       ASSERT(obj);
+
        if (strcmp(ev->keyname, KEY_RIGHT) &&
                        strcmp(ev->keyname, KEY_LEFT))
                return;
@@ -260,6 +263,8 @@ void CVideoSlider::OnKeyDown(int id, Evas *e, Evas_Object *obj,
 void CVideoSlider::OnKeyUp(int id, Evas *e, Evas_Object *obj,
                        Evas_Event_Key_Up *ev)
 {
+       ASSERT(obj);
+
        if (strcmp(ev->keyname, KEY_RIGHT) &&
                        strcmp(ev->keyname, KEY_LEFT))
                return;
@@ -270,20 +275,23 @@ void CVideoSlider::OnKeyUp(int id, Evas *e, Evas_Object *obj,
 void CVideoSlider::OnMouseDown(int id, Evas *e, Evas_Object *obj,
                        Evas_Event_Mouse_Down *ev)
 {
+       ASSERT(obj);
+
        m_SeekStart(obj);
 }
 
 void CVideoSlider::OnMouseUp(int id, Evas *e, Evas_Object *obj,
                        Evas_Event_Mouse_Up *ev)
 {
+       ASSERT(obj);
+
        m_SeekEnd(obj);
 }
 
 void CVideoSlider::OnMouseMove(int id, Evas *e, Evas_Object *obj,
                        Evas_Event_Mouse_Move *ev)
 {
-       if (!obj)
-               return;
+       ASSERT(obj);
 
        if (!elm_object_focus_get(obj))
                elm_object_focus_set(obj, EINA_TRUE);
@@ -291,11 +299,15 @@ void CVideoSlider::OnMouseMove(int id, Evas *e, Evas_Object *obj,
 
 void CVideoSlider::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
 {
+       ASSERT(m);
+
        elm_object_signal_emit(m->base, SIG_SLIDER_FOCUS, "");
 }
 
 void CVideoSlider::OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item)
 {
+       ASSERT(m);
+
        elm_object_signal_emit(m->base, SIG_SLIDER_UNFOCUS, "");
 }
 
index 1537620..4bb5317 100644 (file)
@@ -119,13 +119,11 @@ void CPlayerView::m_UpdateInfoBar(void)
        /* 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",
@@ -148,8 +146,6 @@ bool CPlayerView::m_PlayerInit(void)
        bool r;
 
        r = m->player->Play();
-       if (r < 0)
-               return false;
 
        path = m->player->GetPath();
 
@@ -167,7 +163,7 @@ bool CPlayerView::m_PlayerInit(void)
                timeout_handler_reset(m->timeout_handle);
        }
 
-       return true;
+       return r;
 }
 
 void CPlayerView::sm_EvtRewindBtn(void *dt)
@@ -477,21 +473,29 @@ bool CPlayerView::m_AddControls(void)
 
        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();
                return false;
+       }
 
-       if (!m->volume->Create(m->win))
+       if (!m->volume->Create(m->win)) {
+               m->control->Destroy();
+               m->slider->Destroy();
                return false;
+       }
 
        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);
 
-       if (!m->timeout_handle)
-               return false;
-
        return true;
 }
 
@@ -512,36 +516,42 @@ Eina_Bool CPlayerView::sm_CbDrawAnimation(void *dt)
        return ECORE_CALLBACK_CANCEL;
 }
 
-void CPlayerView::m_ControlInit(SPlayerParam *param)
+bool CPlayerView::m_ControlInit(SPlayerParam *param)
 {
-       bool r;
-
        m->mediadata = new CMediaData;
-       if (!m->mediadata)
+       if (!m->mediadata) {
                _ERR("mediadata init failed");
+               return false;
+       }
 
        if (param->id)
                m->id = strdup(param->id);
 
        m->player = new CPlayer;
-       if (!m->player)
+       if (!m->player) {
                _ERR("player init failed");
-
-       r = m->player->Create(m->win, param->filepath, param->playlist);
-       if (!r)
-               _ERR("player creation failed");
+               return false;
+       }
 
        m->control = new CVideoController;
-       if (!m->control)
+       if (!m->control) {
                _ERR("control init failed");
+               return false;
+       }
 
        m->volume = new CVolume;
-       if (!m->volume)
+       if (!m->volume) {
                _ERR("volume init failed");
+               return false;
+       }
 
        m->slider = new CVideoSlider;
-       if (!m->slider)
+       if (!m->slider) {
                _ERR("slider init failed");
+               return false;
+       }
+
+       return true;
 }
 
 bool CPlayerView::m_UiInit(void)
@@ -584,6 +594,7 @@ bool CPlayerView::Create(void *data)
        ASSERT(data);
 
        Evas_Object *win;
+       SPlayerParam *param;
        bool r;
 
        win = CViewMgr::GetInstance()->Window();
@@ -596,18 +607,38 @@ bool CPlayerView::Create(void *data)
        }
 
        m->win = win;
+       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");
-               goto err;
+               goto err_control;
+       }
+
+       r = m->player->Create(m->win, param->filepath, param->playlist);
+       if (!r) {
+               _ERR("player creation failed");
+               goto err_control;
        }
 
-       if (!m_PlayerInit()) {
+       r = m_PlayerInit();
+       if (!r) {
                _ERR("failed to play video");
-               goto err;
+               goto err_player;
        }
 
        m->player->SetCompletedCb(sm_CbPlayComplete, m);
@@ -625,6 +656,12 @@ bool CPlayerView::Create(void *data)
 
        return true;
 
+err_player:
+       m->player->Destroy();
+err_control:
+       m->control->Destroy();
+       m->slider->Destroy();
+       m->volume->Destroy();
 err:
        m_Fini();
        return false;
@@ -633,32 +670,17 @@ err:
 void CPlayerView::m_Fini(void)
 {
        ecore_timer_del(m->drawanim_timer);
-       m->drawanim_timer = NULL;
 
        delete m->mediadata;
-       m->mediadata = NULL;
-
-       m->player->Destroy();
-       delete m->player;
-       m->player = NULL;
 
        timeout_handler_fini(m->timeout_handle);
-       m->timeout_handle = NULL;
 
        free(m->id);
-       m->id = NULL;
 
-       m->volume->Destroy();
+       delete m->player;
        delete m->volume;
-       m->volume = NULL;
-
-       m->control->Destroy();
        delete m->control;
-       m->control = NULL;
-
-       m->slider->Destroy();
        delete m->slider;
-       m->slider = NULL;
 
        delete m;
        m = NULL;
@@ -670,6 +692,11 @@ void CPlayerView::Destroy(void)
 
        CBaseView::Destroy();
 
+       m->player->Destroy();
+       m->volume->Destroy();
+       m->control->Destroy();
+       m->slider->Destroy();
+
        m_Fini();
 }
 
index 0ced574..6bb62e4 100644 (file)
@@ -46,6 +46,7 @@ void CVolume::m_SetMute(bool mute)
                        return;
 
                m->volume = vol;
+               sound_manager_set_volume(SOUND_TYPE_MEDIA, 0);
        } else {
                sound_manager_set_volume(SOUND_TYPE_MEDIA, m->volume);
        }
@@ -90,9 +91,6 @@ void CVolume::m_UpdateVolume(void)
        char buf[8];
        int r;
 
-       if (!m->bar)
-               return;
-
        r = sound_manager_get_volume(SOUND_TYPE_MEDIA, &vol);
        if (r != SOUND_MANAGER_ERROR_NONE) {
                _ERR("get volume error");
@@ -115,10 +113,9 @@ void CVolume::m_UpdateVolume(void)
 
 Eina_Bool CVolume::sm_CbTimer(void *dt)
 {
-       SVolumeData *data;
+       ASSERT(dt);
 
-       if (!dt)
-               return ECORE_CALLBACK_CANCEL;
+       SVolumeData *data;
 
        data = (SVolumeData *)dt;
 
@@ -160,17 +157,9 @@ bool CVolume::Create(Evas_Object *base)
        Evas_Object *ly;
        Evas_Object *bar;
 
-       m = new SVolumeData;
-       if (!m) {
-               _ERR("allocation fail");
-               return false;
-       }
-
        ly = elm_layout_add(base);
-       if (!ly) {
-               delete m;
+       if (!ly)
                return false;
-       }
 
        elm_layout_file_set(ly, EDJEFILE, GRP_VOLUME);
        elm_win_resize_object_add(base, ly);
@@ -179,7 +168,6 @@ bool CVolume::Create(Evas_Object *base)
        bar = elm_progressbar_add(ly);
        if (!bar) {
                _ERR("failed to create progressbar");
-               delete m;
                evas_object_del(ly);
                return false;
        }
@@ -191,8 +179,16 @@ bool CVolume::Create(Evas_Object *base)
        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->timer = NULL;
 
        sound_manager_set_session_type(SOUND_SESSION_TYPE_EXCLUSIVE);
 
@@ -204,6 +200,7 @@ void CVolume::Destroy(void)
        ASSERT(m);
 
        ecore_timer_del(m->timer);
+
        delete m;
        m = NULL;
 }