📄 jma_video_recorder.c
字号:
video_preview_data.overlay_frame_source_key = 0;
video_preview_data.overlay_frame_width = 0;
video_preview_data.overlay_frame_height = 0;
video_preview_data.overlay_frame_buffer_address = NULL;
if (video_player.state == JAVA_MEDIA_STATE_READY)
{
jma_video_player_refine_display_info();
ret = jma_video_player_process_layer();
/* Config hardware layer: even if in invisible case */
jui_widget_set_hardware_layer(preview_layer_handle, &blt_layer_flag, &preview_layer_flag);
if (video_ctrl_info.is_visible == KAL_FALSE)
{
jui_widget_set_hardware_layer(GDI_NULL_HANDLE, NULL, NULL);
jui_widget_refresh_screen(0, 0, LCD_WIDTH - 1, LCD_HEIGHT - 1);
}
result = mdi_video_rec_preview_start(
preview_layer_handle,
blt_layer_flag,
preview_layer_flag,
video_ctrl_info.is_visible, //MMI_TRUE,
&video_preview_data);
if (result == MDI_RES_VDOREC_SUCCEED)
{
kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, video_player.state, JAVA_MEDIA_STATE_PLAYING);
video_player.state = JAVA_MEDIA_STATE_PLAYING;
JMA_CS_LEAVE(KAL_TRUE);
}
else
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, result);
/* free layers */
jui_widget_set_hardware_layer(GDI_NULL_HANDLE, NULL, NULL);
jui_widget_refresh_screen(0, 0, LCD_WIDTH - 1, LCD_HEIGHT - 1);
if (preview_layer_handle != GDI_LAYER_EMPTY_HANDLE)
{
gdi_layer_free(preview_layer_handle);
preview_layer_handle = GDI_LAYER_EMPTY_HANDLE;
ASSERT(preview_buf_ptr != NULL)
mmi_frm_scrmem_free(preview_buf_ptr);
preview_buf_ptr = NULL;
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RELEASE_SCR_MEMORY);
}
JMA_CS_LEAVE(KAL_FALSE);
}
}
JMA_CS_LEAVE(KAL_FALSE);
}
/*****************************************************************************
* FUNCTION
* jma_video_recorder_stop_preview
* DESCRIPTION
* function to be called to stop preview
* PARAMETERS
* void
* native_player(?) [IN] Play ID
* int mma_type(?)
* RETURNS
* Bool.
*****************************************************************************/
kal_bool jma_video_recorder_stop_preview(kal_int32 mma_type, kal_int32 java_player)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
MDI_RESULT result;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_RECORDER_STOP_PREVIEW, java_player, video_player.state);
JMA_CS_ENTER(KAL_FALSE);
if (video_player.id != java_player)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
JMA_CS_LEAVE(KAL_FALSE);
}
if (video_player.state == JAVA_MEDIA_STATE_PLAYING)
{
result = mdi_video_rec_preview_stop();
/* free layers */
jui_widget_set_hardware_layer(GDI_NULL_HANDLE, NULL, NULL);
jui_widget_refresh_screen(0, 0, LCD_WIDTH - 1, LCD_HEIGHT - 1);
if (preview_layer_handle != GDI_LAYER_EMPTY_HANDLE)
{
gdi_layer_free(preview_layer_handle);
preview_layer_handle = GDI_LAYER_EMPTY_HANDLE;
ASSERT(preview_buf_ptr != NULL)
mmi_frm_scrmem_free(preview_buf_ptr);
preview_buf_ptr = NULL;
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RELEASE_SCR_MEMORY);
}
kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, video_player.state, JAVA_MEDIA_STATE_READY);
video_player.state = JAVA_MEDIA_STATE_READY;
}
JMA_CS_LEAVE(KAL_TRUE);
}
/*****************************************************************************
* FUNCTION
* jma_video_recorder_start_record
* DESCRIPTION
* This function submit Record request to media task.
* PARAMETERS
* mma_type [IN] Int recorder
* java_player [IN]
* RETURNS
* int - 0
*****************************************************************************/
kal_bool jma_video_recorder_start_record(kal_int32 mma_type, kal_int32 java_player)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
MDI_RESULT result;
kal_int32 ticks = kal_milli_secs_to_ticks(200); /* 200 ms */
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_RECORDER_START_RECORD, java_player, video_player.state);
JMA_CS_ENTER(KAL_FALSE);
if (video_player.id != java_player)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
JMA_CS_LEAVE(KAL_FALSE);
}
/* Spec says ignore. */
if (video_player.state == JAVA_MEDIA_STATE_RECORDING)
{
JMA_CS_LEAVE(KAL_TRUE);
}
if (video_player.state == JAVA_MEDIA_STATE_PLAYING)
{
result = mdi_video_rec_record_start(
(S8*) video_player.filename,
jma_video_recorder_record_result_hdlr);
}
else if (video_player.state == JAVA_MEDIA_STATE_PAUSED)
{
result = mdi_video_rec_record_resume();
}
else
{
kal_print("Video Record FAIL: state is not right!");
jma_video_recorder_close(mma_type, java_player);
JMA_CS_LEAVE(KAL_FALSE);
}
if (result == MDI_RES_VDOREC_SUCCEED)
{
kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, video_player.state, JAVA_MEDIA_STATE_RECORDING);
video_player.state = JAVA_MEDIA_STATE_RECORDING;
if (video_player.record_size_limit != -1)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_STACK_START_TIMER);
stack_start_timer(&java_media_timer, JAVA_MEDIA_TIMER_VIDEO_RECORDER, ticks);
}
JMA_CS_LEAVE(KAL_TRUE);
}
else
{
jma_video_recorder_close(mma_type, java_player);
jvm_post_mma_event(MMA_EVENT_RECORD_ERROR, (kal_int16) java_player, (kal_int64) MMA_ERR_RECORD_FAIL);
JMA_CS_LEAVE(KAL_FALSE);
}
}
/*****************************************************************************
* FUNCTION
* jma_video_recorder_pause_record
* DESCRIPTION
* This function submit stop request to media task.
* PARAMETERS
* mma_type [IN]
* java_player [IN]
* int recorder(?)
* RETURNS
* int - 0
*****************************************************************************/
kal_bool jma_video_recorder_pause_record(kal_int32 mma_type, kal_int32 java_player)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
MDI_RESULT result;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_RECORDER_PAUSE_RECORD, java_player, video_player.state);
JMA_CS_ENTER(KAL_FALSE);
if (video_player.id != java_player)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
JMA_CS_LEAVE(KAL_FALSE);
}
if (video_player.state == JAVA_MEDIA_STATE_RECORDING)
{
result = mdi_video_rec_record_pause(KAL_FALSE);
if (result == MDI_RES_VDOREC_SUCCEED)
{
if (video_player.record_size_limit != -1)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_STACK_STOP_TIMER);
stack_stop_timer(&java_media_timer);
}
kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, video_player.state, JAVA_MEDIA_STATE_PAUSED);
video_player.state = JAVA_MEDIA_STATE_PAUSED;
/* get record time */
mdi_video_rec_get_cur_record_time(&video_player.current_time);
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, (int) video_player.current_time);
}
else
{
jma_video_recorder_close(mma_type, java_player);
JMA_CS_LEAVE(KAL_FALSE);
}
}
JMA_CS_LEAVE(KAL_TRUE);
}
/*****************************************************************************
* FUNCTION
* jma_video_recorder_stop_record
* DESCRIPTION
* This function deallocate mpeg recorder context
* PARAMETERS
* mma_type [IN] Int recorder
* java_player [IN]
* RETURNS
* kal_bool - true
*****************************************************************************/
static kal_bool jma_video_recorder_stop_record(kal_int32 mma_type, kal_int32 java_player)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
MDI_RESULT result;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_RECORDER_STOP_RECORD, java_player, video_player.state);
JMA_CS_ENTER(KAL_FALSE);
if (video_player.id != java_player)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
JMA_CS_LEAVE(KAL_FALSE);
}
/* Stop timer */
if (video_player.state == JAVA_MEDIA_STATE_RECORDING)
{
if (video_player.record_size_limit != -1)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_STACK_STOP_TIMER);
stack_stop_timer(&java_media_timer);
}
}
if (video_player.state == JAVA_MEDIA_STATE_RECORDING ||
video_player.state == JAVA_MEDIA_STATE_PAUSED)
{
/* get record time */
mdi_video_rec_get_cur_record_time(&video_player.current_time);
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, (int) video_player.current_time);
result = mdi_video_rec_record_stop();
/* free layers */
jui_widget_set_hardware_layer(GDI_NULL_HANDLE, NULL, NULL);
jui_widget_refresh_screen(0, 0, LCD_WIDTH - 1, LCD_HEIGHT - 1);
if (preview_layer_handle != GDI_LAYER_EMPTY_HANDLE)
{
gdi_layer_free(preview_layer_handle);
preview_layer_handle = GDI_LAYER_EMPTY_HANDLE;
ASSERT(preview_buf_ptr != NULL)
mmi_frm_scrmem_free(preview_buf_ptr);
preview_buf_ptr = NULL;
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RELEASE_SCR_MEMORY);
}
/* MED recorder stopped, JAL has not saved file yet */
kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, video_player.state, JAVA_MEDIA_STATE_STOPPED_PAUSED);
video_player.state = JAVA_MEDIA_STATE_STOPPED_PAUSED;
}
JMA_CS_LEAVE(KAL_TRUE);
}
/*****************************************************************************
* FUNCTION
* jma_video_recorder_close
* DESCRIPTION
* This function deallocate mpeg recorder context
* PARAMETERS
* mma_type [IN] Int recorder
* java_player [IN]
* RETURNS
* kal_bool - true
*****************************************************************************/
kal_bool jma_video_recorder_commit(kal_int32 mma_type, kal_int32 java_player)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_RECORDER_COMMIT, java_player, video_player.state);
JMA_CS_ENTER(KAL_FALSE);
if (video_player.id != java_player)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
JMA_CS_LEAVE(KAL_FALSE);
}
if (video_player.state == JAVA_MEDIA_STATE_RECORDING ||
video_player.state == JAVA_MEDIA_STATE_PAUSED)
{
/* State will be changed */
jma_video_recorder_stop_record(mma_type, java_player);
}
/* MED recorder has stopped, JAL has not saved file yet */
if (video_player.state == JAVA_MEDIA_STATE_STOPPED_PAUSED)
{
/* save file */
jma_video_recorder_save_file();
/* After commit(), setRecordLocation needs to be called again */
mmi_ucs2cpy((S8*) video_player.filename, "");
kal_trace(TRACE_GROUP_4, J2ME_MMA_STATE_TRANSITION, video_player.state, JAVA_MEDIA_STATE_READY);
video_player.state = JAVA_MEDIA_STATE_READY;
}
JMA_CS_LEAVE(KAL_TRUE);
}
/*****************************************************************************
* FUNCTION
* jma_video_recorder_reset
* DESCRIPTION
* This function deallocate mpeg recorder context
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -