📄 jma_video_recorder.c
字号:
/*****************************************************************************
* Copyright Statement:
* --------------------
* This software is protected by Copyright and the information contained
* herein is confidential. The software may not be copied and the information
* contained herein may not be used or disclosed except with the written
* permission of MediaTek Inc. (C) 2005
*
*****************************************************************************/
/*****************************************************************************
*
* Filename:
* ---------
* jma_video_recorder.c
*
* Project:
* --------
* Maui_Software
*
* Description:
* ------------
* This file defines native JMA video recorder APIs
*
* Author:
* -------
* -------
*
*============================================================================
* HISTORY
* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*------------------------------------------------------------------------------
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*============================================================================
****************************************************************************/
/**
* @(#)jma_video_recorder.c 1.00 05/12/07
*
* Copyright (c) 2005 MediaTek Inc. All rights reserved.
*/
/*************************************************************************
* Include Header Files
*************************************************************************/
#include "jma_interface.h"
#include "jma_internal.h"
#include "FileManagerGProt.h"
/*************************************************************************
* bluetooth headers
*************************************************************************/
#if defined(__MMI_FTS_SUPPORT__)
#if defined(__MMI_BT_BCHS_SUPPORT__)
#include "BTMMIBCHS.h"
#include "BTMMIScr.h"
#include "FTPMMIGprots.h"
#elif defined(__MMI_BT_MTK_SUPPORT__)
#include "BTMMICm.h"
#include "BTMMIFtpGprots.h"
#endif
#endif
#ifdef __MMI_OPP_SUPPORT__
#if defined(__MMI_BT_BCHS_SUPPORT__)
#include "OPPMMIGprots.h"
#elif defined(__MMI_BT_MTK_SUPPORT__)
#include "BTMMIOppGprots.h"
#endif
#endif
/*****************************************************************************
* Global Definition and Declaration
*****************************************************************************/
#if defined (SUPPORT_MMAPI) && !defined (J2ME_SHARE_MED_EXT_MEM) && defined(__MMI_VIDEO_RECORDER__)
/*****************************************************************************
* Global Definition and Declaration
*****************************************************************************/
kal_bool video_record_need_merge = KAL_FALSE;
/*****************************************************************************
* private functions
*****************************************************************************/
void jma_video_recorder_save_file(void);
void jma_video_recorder_record_result_hdlr(MDI_RESULT result);
void jma_video_recorder_save_result_hdlr(MDI_RESULT result);
kal_bool jma_video_recorder_refresh(kal_int32 java_player);
static kal_bool jma_video_recorder_stop_record(kal_int32 mma_type, kal_int32 java_player);
/*****************************************************************************
* FUNCTION
* jma_video_recorder_timer_expired
* DESCRIPTION
* This function handles video recorder timer expired
* PARAMETERS
* mma_type [IN]
* java_player [IN]
* RETURNS
* void
*****************************************************************************/
void jma_video_recorder_timer_expired(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_uint64 record_size;
kal_int32 ticks = kal_milli_secs_to_ticks(200); /* 200 ms */
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_RECORDER_TIMER_EXPIRED, video_player.id, video_player.state);
JMA_CS_ENTER(JMA_VOID);
if (video_player.state != JAVA_MEDIA_STATE_RECORDING)
{
kal_print("Video Record FAIL: state is not right!");
JMA_CS_LEAVE(JMA_VOID);
}
ASSERT(video_player.state == JAVA_MEDIA_STATE_RECORDING);
record_size = mdi_video_rec_get_record_file_size();
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, record_size);
/* Reach record size limit */
if (record_size >= video_player.record_size_limit)
{
/* State will be changed */
jma_video_recorder_stop_record(MMA_TYPE_MPEG, video_player.id);
jvm_post_mma_event(MMA_EVENT_RECORD_STOPPED,
(kal_int16) video_player.id, video_player.current_time);
}
else /* re-start timer */
{
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(JMA_VOID);
}
/*****************************************************************************
* FUNCTION
* jma_video_recorder_suspend_hdlr
* DESCRIPTION
* This function handles video recorder suspend
* PARAMETERS
* hdlr [IN]
* RETURNS
* int result
*****************************************************************************/
kal_int32 jma_video_recorder_suspend_hdlr(kal_int32 java_player)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
java_media_state_enum original_state;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_RECORDER_SUSPEND_HDLR, java_player, video_player.state);
JMA_CS_ENTER(RESOUCE_FAIL);
if (video_player.id != java_player)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
JMA_CS_LEAVE(RESOUCE_FAIL);
}
original_state = video_player.state;
/* Avoid data abort: But Cannot change state */
if (original_state == JAVA_MEDIA_STATE_RECORDING ||
original_state == JAVA_MEDIA_STATE_PAUSED ||
original_state == JAVA_MEDIA_STATE_STOPPED_PAUSED)
{
/* State will be changed to READY */
jma_video_recorder_reset(MMA_TYPE_MPEG, java_player);
}
else if (original_state == JAVA_MEDIA_STATE_PLAYING)
{
jma_video_recorder_stop_preview(MMA_TYPE_MPEG, java_player);
}
/* Camera power off */
if (video_player.state == JAVA_MEDIA_STATE_READY)
{
mdi_video_rec_power_off();
}
/* Resume to original state */
video_player.state = original_state;
JMA_CS_LEAVE(RESOUCE_NO_ERROR);
}
/*****************************************************************************
* FUNCTION
* jma_video_recorder_resume_hdlr
* DESCRIPTION
* This function handles video recorder timer expired
* PARAMETERS
* native_recorder [IN]
* RETURNS
* int - result
*****************************************************************************/
kal_int32 jma_video_recorder_resume_hdlr(kal_int32 java_player)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
MDI_RESULT result;
kal_bool ret;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_RECORDER_RESUME_HDLR, java_player, video_player.state);
JMA_CS_ENTER(RESOUCE_FAIL);
if (video_player.id != java_player)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
JMA_CS_LEAVE(RESOUCE_FAIL);
}
if (video_player.state == JAVA_MEDIA_STATE_READY)
{
/* Backlight control */
jvm_force_backlight_on(KAL_TRUE);
/* camera HW power on */
result = mdi_video_rec_power_on();
}
else if (video_player.state == JAVA_MEDIA_STATE_PLAYING)
{
/* Backlight control */
jvm_force_backlight_on(KAL_TRUE);
result = mdi_video_rec_power_on();
video_player.state = JAVA_MEDIA_STATE_READY;
ret = jma_video_recorder_start_preview(MMA_TYPE_MPEG, java_player);
if (ret == KAL_FALSE)
{
result = mdi_camera_power_off();
if (video_player.is_double_buffer)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_STOP_DOUBLE_BUFFER);
jui_widget_stop_double_buffer();
video_player.is_double_buffer = KAL_FALSE;
}
jma_video_player_reset_parameter();
jma_deregister_device(JAVA_MEDIA_MPEG_RECORDER_DEVICE, java_player);
/* Backlight control */
jvm_force_backlight_on(KAL_FALSE);
}
}
else
{
jvm_post_mma_event(
MMA_EVENT_RECORD_ERROR,
(kal_int16) java_player,
(kal_int64) MMA_ERR_MMI_INTERRUPT);
if (video_player.is_double_buffer)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_STOP_DOUBLE_BUFFER);
jui_widget_stop_double_buffer();
video_player.is_double_buffer = KAL_FALSE;
}
jma_video_player_reset_parameter();
jma_deregister_device(JAVA_MEDIA_MPEG_RECORDER_DEVICE, java_player);
}
JMA_CS_LEAVE(RESOUCE_NO_ERROR);
}
/*****************************************************************************
* FUNCTION
* jma_video_recorder_close_hdlr
* DESCRIPTION
* This function handles video recorder timer expired
* PARAMETERS
* native_recorder [IN]
* RETURNS
* int result
*****************************************************************************/
kal_int32 jma_video_recorder_close_hdlr(kal_int32 java_player)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_VIDEO_RECORDER_CLOSE_HDLR, java_player, video_player.state);
JMA_CS_ENTER(RESOUCE_FAIL);
if (video_player.id != java_player)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, video_player.id);
JMA_CS_LEAVE(RESOUCE_FAIL);
}
if (!is_vm_suspend_media)
{
if (video_player.state == JAVA_MEDIA_STATE_RECORDING ||
video_player.state == JAVA_MEDIA_STATE_PAUSED ||
video_player.state == JAVA_MEDIA_STATE_STOPPED_PAUSED)
{
/* State will be changed to READY */
jma_video_recorder_reset(MMA_TYPE_MPEG, java_player);
}
if (video_player.state == JAVA_MEDIA_STATE_PLAYING)
{
jma_video_recorder_stop_preview(MMA_TYPE_MPEG, java_player);
}
/* Camera power off */
if (video_player.state == JAVA_MEDIA_STATE_READY)
{
mdi_video_rec_power_off();
}
}
if (video_player.is_double_buffer)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_STOP_DOUBLE_BUFFER);
jui_widget_stop_double_buffer();
video_player.is_double_buffer = KAL_FALSE;
}
jma_video_player_reset_parameter();
video_record_need_merge = KAL_FALSE;
/* Backlight control */
jvm_force_backlight_on(KAL_FALSE);
JMA_CS_LEAVE(RESOUCE_NO_ERROR);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -