⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vdoplyapp.c

📁 plutommi mtkapp Video Src
💻 C
📖 第 1 页 / 共 5 页
字号:
            
            layer_offset_x = g_vdoply_osd_cntx.loading.rect.offset_x;
            layer_offset_y = g_vdoply_osd_cntx.loading.rect.offset_y;    
            
            gdi_layer_set_position(layer_offset_x, layer_offset_y);

            gdi_layer_clear(GDI_COLOR_TRANSPARENT);

            gdi_image_draw_animation_id(
                g_vdoply_osd_cntx.loading.bg.offset_x-layer_offset_x,
                g_vdoply_osd_cntx.loading.bg.offset_y-layer_offset_y,
                IMG_ID_VDOPLY_OSD_BT_CONNECTING,
                &g_vdoply_cntx.bt_connecting_anim);

            gdi_layer_pop_and_restore_active();
        }

    }
    else
    {
    #ifdef __VDOPLY_FEATURE_FULLSCREEN__
        mmi_vdoply_set_state_layer_config(VDOPLY_STATE_FULLSCR_BT_CONNECTING);

    #ifndef __VDOPLY_FEATURE_HIDE_FULLSCR_OSD__
        mmi_vdoply_draw_fullscr_osd();
    #endif
        
        if (g_vdoply_cntx.bt_connecting_anim == GDI_NULL_HANDLE)
        {    
            gdi_layer_push_and_set_active(g_vdoply_cntx.process_layer_handle);

            layer_offset_x = g_vdoply_fullscr_osd_cntx.loading.rect.offset_x;
            layer_offset_y = g_vdoply_fullscr_osd_cntx.loading.rect.offset_y;    
            
            gdi_layer_set_position(layer_offset_x, layer_offset_y);
            
            gdi_layer_clear(GDI_COLOR_TRANSPARENT);

            gdi_image_draw_animation_id(
                g_vdoply_fullscr_osd_cntx.loading.bg.offset_x - layer_offset_x,
                g_vdoply_fullscr_osd_cntx.loading.bg.offset_y - layer_offset_y,
                IMG_ID_VDOPLY_OSD_BT_CONNECTING,
                &g_vdoply_cntx.bt_connecting_anim);

            gdi_layer_pop_and_restore_active();
        }
    #endif /* __VDOPLY_FEATURE_FULLSCREEN__ */    
    }
    
    mmi_vdoply_blt_screen();

}


/*****************************************************************************
 * FUNCTION
 *  mmi_vdoply_clear_bt_connecting_anim
 * DESCRIPTION
 *  draw title
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
static void mmi_vdoply_clear_bt_connecting_anim(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (g_vdoply_cntx.bt_connecting_anim != GDI_NULL_HANDLE)
    {    
        gdi_image_stop_animation(g_vdoply_cntx.bt_connecting_anim);
        g_vdoply_cntx.bt_connecting_anim = GDI_NULL_HANDLE;  
        
        gdi_layer_push_and_set_active(g_vdoply_cntx.process_layer_handle);
        gdi_layer_clear(GDI_COLOR_TRANSPARENT);
        gdi_layer_pop_and_restore_active();
    }
}


/*****************************************************************************
 * FUNCTION
 *  mmi_vdoply_get_bt_headset
 * DESCRIPTION
 *  retrieve the user selected bt headset
 * PARAMETERS
 *  void
 * RETURNS
 *  mmi_bt_dev_struct*
 *****************************************************************************/
mmi_bt_dev_struct *mmi_vdoply_get_bt_headset(void)
{
    return mmi_audply_get_bt_headset();
}

/*****************************************************************************
 * FUNCTION
 *  mmi_vdoply_bt_open_callback
 * DESCRIPTION
 *  a callback function invoked by av_bt_open apis
 * PARAMETERS
 *  result
 * RETURNS
 *  void
 *****************************************************************************/
static void mmi_vdoply_bt_open_callback(S32 result)
{
    gui_cancel_timer(mmi_vdoply_draw_bt_connecting_anim);
    mmi_vdoply_clear_bt_connecting_anim();
    
    switch (result)
    {
        case AV_BT_CALLBACK_EVENT_OPEN_OK:
            /* 
             *  NOTICE: even after receive EVENT_OPEN_FAILED or EVENT_OPEN_STOPPED,
             *          bt driver may still send EVENT_OPEN_OK, this is due to driver 
             *          has retry mechanism.
             */
            
            if (g_vdoply_cntx.state == VDOPLY_STATE_BT_CONNECTING)
            {
                av_bt_open_codec(KAL_FALSE);                
                mmi_vdoply_enter_state(VDOPLY_STATE_PLAY);
            }    
            else if (g_vdoply_cntx.state == VDOPLY_STATE_FULLSCR_BT_CONNECTING)
            {
                av_bt_open_codec(KAL_FALSE);                
                mmi_vdoply_enter_state(VDOPLY_STATE_FULLSCR_PLAY);
            }            
            else if (g_vdoply_cntx.state == VDOPLY_STATE_STREAM_BT_CONNECTING)
            {
                av_bt_open_codec(KAL_FALSE);                
                mmi_vdoply_enter_state(VDOPLY_STATE_STREAM_BUFFERING);
            }
            else if (g_vdoply_cntx.state == VDOPLY_STATE_STREAM_FULLSCR_BT_CONNECTING)
            {
                av_bt_open_codec(KAL_FALSE);                
                mmi_vdoply_enter_state(VDOPLY_STATE_STREAM_FULLSCR_BUFFERING);
            }
            else if (g_vdoply_cntx.state == VDOPLY_STATE_STREAM_BUFFERING ||
                     g_vdoply_cntx.state == VDOPLY_STATE_STREAM_FULLSCR_BUFFERING)
            {
                av_bt_open_codec(KAL_FALSE);
            }
            else if (g_vdoply_cntx.state == VDOPLY_STATE_PLAY ||
                     g_vdoply_cntx.state == VDOPLY_STATE_FULLSCR_PLAY ||
                     g_vdoply_cntx.state == VDOPLY_STATE_STREAM_PLAY ||
                     g_vdoply_cntx.state == VDOPLY_STATE_STREAM_FULLSCR_PLAY)
            {
                /* 
                 * since it is already play, we may set TRUE, which will directly
                 * change output to BT 
                 */
                av_bt_open_codec(KAL_TRUE);
            }            
            break;

        case AV_BT_CALLBACK_EVENT_OPEN_FAILED:
        case AV_BT_CALLBACK_EVENT_OPEN_STOPPED:
            if (g_vdoply_cntx.state == VDOPLY_STATE_BT_CONNECTING)
            {
                 /* connect failed - play the video */
                 mmi_vdoply_enter_state(VDOPLY_STATE_PLAY);
            }
            else if (g_vdoply_cntx.state == VDOPLY_STATE_FULLSCR_BT_CONNECTING)
            {
                 /* connect failed - play the video */
                 mmi_vdoply_enter_state(VDOPLY_STATE_FULLSCR_PLAY);
            }            
            else if (g_vdoply_cntx.state == VDOPLY_STATE_STREAM_BT_CONNECTING)
            {
                 /* connect failed - start buffering */
                mmi_vdoply_enter_state(VDOPLY_STATE_STREAM_BUFFERING);
            }
            else if (g_vdoply_cntx.state == VDOPLY_STATE_STREAM_FULLSCR_BT_CONNECTING)
            {
                 /* connect failed - start buffering */
                mmi_vdoply_enter_state(VDOPLY_STATE_STREAM_FULLSCR_BUFFERING);
            }
            else
            {
                /* already connected, driver abort */
                av_bt_close_codec();
            }
            break;
            
        case AV_BT_CALLBACK_EVENT_OPEN_CANCELED:
            MMI_ASSERT(0);
            break;
            
        case AV_BT_CALLBACK_EVENT_STREAM_ABORT_IND:
        case AV_BT_CALLBACK_EVENT_STREAM_CLOSE_IND:
        case AV_BT_CALLBACK_EVENT_STREAM_SUSPEND_IND:
        case AV_BT_CALLBACK_EVENT_UNEXPECTED_DISCONNECT_IND:
            /* TODO: display popup to show BT disconnect */
            av_bt_close_codec();
            break;
        
        case AV_BT_CALLBACK_EVENT_STREAM_START_IND:
        case AV_BT_CALLBACK_EVENT_INQUIRY_START_IND:        
        case AV_BT_CALLBACK_EVENT_INQUIRY_STOP_IND:        
            /* ignore */
            break;

        default:
            MMI_ASSERT(0);
            break;
    }
}


#endif /* __MMI_AUDIO_PLAYER__ && __MMI_BT_MTK_SUPPORT__ && __MMI_A2DP_SUPPORT__ */



/*****************************************************************************
 * FUNCTION
 *  mmi_vdoply_is_output_to_bt
 * DESCRIPTION
 *  a callback function invoked by av_bt_open apis
 * PARAMETERS
 *  result
 * RETURNS
 *  void
 *****************************************************************************/
static MMI_BOOL mmi_vdoply_is_output_to_bt(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/


    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/    
#if defined(__MMI_AUDIO_PLAYER__) && defined(__MMI_BT_MTK_SUPPORT__) && defined(__MMI_A2DP_SUPPORT__)
    if (mmi_audply_is_output_to_bt() &&
        (g_vdoply_cntx.video_info.track == MDI_VIDEO_TRACK_AV ||
         g_vdoply_cntx.video_info.track == MDI_VIDEO_TRACK_A_ONLY))
    {
        return MMI_TRUE;
    }
    else
    {
        return MMI_FALSE;
    }

#else
    return MMI_FALSE;
#endif 
}


/*****************************************************************************
 * FUNCTION
 *  mmi_vdoply_connect_bt
 * DESCRIPTION
 *  start play video
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
static void mmi_vdoply_connect_bt(void)
{
#if defined(__MMI_AUDIO_PLAYER__) && defined(__MMI_BT_MTK_SUPPORT__) && defined(__MMI_A2DP_SUPPORT__)        
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    MMI_BOOL is_stereo;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (g_vdoply_cntx.state == VDOPLY_STATE_BT_CONNECTING || 
        g_vdoply_cntx.state == VDOPLY_STATE_FULLSCR_BT_CONNECTING || 
        g_vdoply_cntx.state == VDOPLY_STATE_STREAM_BT_CONNECTING ||        
        g_vdoply_cntx.state == VDOPLY_STATE_STREAM_FULLSCR_BT_CONNECTING)
    {
        if (mmi_vdoply_is_output_to_bt())
        {
            /* if connecting is not start in 600ms, we will show bt connecting anim */
            gui_start_timer(600, mmi_vdoply_draw_bt_connecting_anim);

            if (g_vdoply_cntx.video_info.aud_channel_no == 2)
            {
                is_stereo = MMI_TRUE;
            }
            else
            {
                is_stereo = MMI_FALSE;
            }

            av_bt_open_ex(
                mmi_vdoply_get_bt_headset(),
                g_vdoply_cntx.video_info.aud_sample_rate,
                (kal_bool)is_stereo,
                mmi_vdoply_bt_open_callback,
                TRUE);   

            return;
        }
        else
        {
            /* shall not enter here */
            MMI_ASSERT(0);
        }
    }
    else
    {
        MMI_ASSERT(0);
    }
#else
    MMI_ASSERT(0);
#endif /* __MMI_AUDIO_PLAYER__ && __MMI_BT_MTK_SUPPORT__ && __MMI_A2DP_SUPPORT__ */


}

/*****************************************************************************
 * FUNCTION
 *  mmi_vdoply_disconnect_bt
 * DESCRIPTION
 *  start play video
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
static void mmi_vdoply_disconnect_bt(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/


    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
#if defined(__MMI_AUDIO_PLAYER__) && defined(__MMI_BT_MTK_SUPPORT__) && defined(__MMI_A2DP_SUPPORT__)    
    gui_cancel_timer(mmi_vdoply_draw_bt_connecting_anim);
    mmi_vdoply_clear_bt_connecting_anim();

    if (mmi_vdoply_is_output_to_bt())
    {
        av_bt_close(FALSE);
    }

    /* TODO: stop anim */
#endif /* __MMI_AUDIO_PLAYER__ && __MMI_BT_MTK_SUPPORT__ && __MMI_A2DP_SUPPORT__ */
 
}



/*****************************************************************************
 * FUNCTION
 *  mmi_vdoply_bt_close_codec
 * DESCRIPTION
 *  start play video
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
static void mmi_vdoply_bt_close_codec(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/


    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -