📄 vdoplyapp.c
字号:
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 + -