📄 vid_msg_handler.c
字号:
*
* 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!!
*==============================================================================
*******************************************************************************/
#ifndef MED_NOT_PRESENT
/*==== INCLUDES =========*/
/* system includes */
#include "kal_release.h"
#include "kal_trace.h"
#include "stack_common.h"
#include "stack_msgs.h"
#include "app_ltlcom.h" /* Task message communiction */
#include "syscomp_config.h"
#include "task_config.h" /* Task creation */
#include "app_buff_alloc.h" /* Declaration of buffer management API */
#include "stacklib.h" /* Basic type for dll, evshed, stacktimer */
#include "event_shed.h" /* Event scheduler */
#include "stack_timer.h" /* Stack timer */
/* global includes */
#include "l1audio.h"
#include "device.h"
#include "resource_audio.h"
#include "nvram_enums.h"
#include "nvram_struct.h"
#include "nvram_user_defs.h"
#include "nvram_data_items.h"
#include "custom_nvram_editor_data_item.h"
#include "fat_fs.h"
#include "custom_equipment.h"
#include "custom_video.h"
#include "rtc_sw.h"
#include "lcd_if.h"
#include "lcd_sw_inc.h"
#ifdef ISP_SUPPORT
#include "isp_if.h"
#endif
#ifdef MP4_CODEC
#include "FSAL.h"
#include "MP4_Parser.h"
#include "MP4_Producer_Audio.h"
#include "MP4_Sample_Data_Audio.h"
#include "video_file_creator.h"
#include "drv_comm.h"
#include "visual_comm.h"
#include "bmd.h"
#include "video_enc_glb.h"
#include "video_dec_glb.h"
#include "video_glb.h"
#include "img_comm.h"
#endif /* MP4_CODEC */
/* local includes */
#include "med_global.h"
#include "med_status.h"
#include "med_main.h"
#include "aud_defs.h"
#include "med_struct.h"
#include "med_api.h"
#include "med_context.h"
#include "med_utility.h"
#include "med_smalloc.h"
#include "cam_main.h"
#include "vid_main.h"
#include "aud_main.h"
#include "img_main.h"
#ifdef MP4_CODEC
#include "med_v_main.h"
#include "med_v_struct.h"
#endif /* MP4_CODEC */
#ifdef __MED_MJPG_MOD__
#ifdef CAMERA_MODULE
#include "ext_camera.h"
#include "cam_module.h"
#endif /* CAMERA_MODULE */
#if defined(JPG_DECODE) || defined(JPG_ENCODE)
#include "jpeg.h"
#endif
#include "visualhisr.h"
#include "med_v_main.h"
#include "med_v_struct.h"
#include "vid_avi.h"
#endif /* __MED_MJPG_MOD__ */
#ifdef __VID_TRACE_ON__
#include "med_trc.h"
#endif
#ifdef __MED_VID_MOD__
#define VIDEO_RECORD_MEM_MARGIN (25*1024)
#define MIN_VIDEO_FILE_SIZE (25*1024)
#ifdef __MED_CAM_MOD__
extern kal_uint8 cam_rotate_map[CAM_NO_OF_IMAGE_ROTATE];
#endif
#if (defined(MT6228) || defined(MT6229))
extern void set_overlay_palette(kal_uint8 palette_size, kal_uint32 *palette_addr_ptr);
#endif
/* seek hint for fast seek */
#define VID_DEC_SEEK_HINT_SIZE 2047
FS_FileLocationHint vid_seek_hint[VID_DEC_SEEK_HINT_SIZE];
kal_int32 vid_record_mem[2] = {MAX_VID_ENC_INT_MEM_SIZE, MAX_VID_ENC_EXT_MEM_SIZE};
kal_int32 vid_play_mem[2] = {MAX_VID_DEC_INT_MEM_SIZE, MAX_VID_DEC_EXT_MEM_SIZE};
/* for playback */
MP4_FILELIST_STRUCT mp4_files;
STFSAL stFSAL;
STMp4Parser stMp4Parser;
MP4DEC_IMGPATH_STRUCT image_data_path;
/* for recording */
STFSAL fsalAudioFile;
STFSAL fsalAudioSampleDataFile;
STMp4Producer stMp4Producer;
extern const kal_uint16 lenSpeechBitsAMR[];
extern const kal_uint16 lenSpeechBitsAMR_WB[];
#if IS_CHIP_MT6219_AND_LATTER_VERSION
extern const kal_uint16 lenSpeechBitsAMR_WB[];
#endif
mpeg4_encode_process_struct mp4_encode;
extern STFSAL stFSAL_v;
extern STMp4Parser stMp4Parser_v;
STFSAL stFSALAudio_STSZ;
STFSAL stFSALAudio_STCO;
STFSAL stFSALVideo_STSZ;
STFSAL stFSALVideo_STCO;
STFSAL stFSALAudio;
kal_uint32 buffer_tmp[1024 / 4]; /* 1K */
kal_uint32 buffer_tmp_v[1024 / 4]; /* 1K */
kal_uint32 buffer_temp_a[1024 / 4];
kal_uint32 buffer_temp_stco_v[512 / 4];
kal_uint32 buffer_temp_stco_a[512 / 4];
kal_uint32 buffer_temp_stsz_v[512 / 4];
kal_uint32 buffer_temp_stsz_a[512 / 4];
/* STBL cache pool */
kal_uint32 buffer_STBL_cache_pool[1024 / 4 * 8]; /* 8 K */
/* the lcd data for play and replay */
lcd_frame_update_struct lcd_data;
MP4DEC_MEMMODE_STRUCT memmode_input;
/*==== FUNCTIONS ===========*/
/*****************************************************************************
* FUNCTION
* vid_get_audio_parser
* DESCRIPTION
*
* PARAMETERS
* void
* RETURNS
*
*****************************************************************************/
STMp4Parser *vid_get_audio_parser(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
return (&stMp4Parser);
}
/*****************************************************************************
* FUNCTION
* vid_update_frame_to_buffer
* DESCRIPTION
* This function is to update current frame image to the display buffer.
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void vid_update_frame_to_buffer(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
memmode_input.disp_width = vid_context_p->display_width;
memmode_input.disp_height = vid_context_p->display_height;
memmode_input.lcd_buf_addr = (kal_uint32) vid_context_p->image_buffer_address;
/* fill the image to the given image frame buffer */
if (vid_context_p->get_frame && vid_context_p->image_buffer_address)
{
video_memorymode_open(&memmode_input);
video_dec_frame_to_memory();
video_memorymode_close();
}
}
/*****************************************************************************
* FUNCTION
* vid_evaluate_residual_size
* DESCRIPTION
* This function is to evaluate the residual size with the given video size.
* PARAMETERS
* video_size [IN]
* RETURNS
* kal_uint32
*****************************************************************************/
kal_uint32 vid_evaluate_residual_size(kal_uint32 video_size)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_uint32 audio_size;
kal_uint32 sum;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (vid_context_p->use_pseudo_merge)
{
kal_uint32 cluster_size;
cluster_size = vid_context_p->file_size_info.disk_cluster_size;
audio_size = (vid_context_p->file_size_info.audio_bitstream_size + (cluster_size - 1)) / (cluster_size);
audio_size = audio_size * cluster_size;
sum = (video_size + audio_size +
vid_context_p->file_size_info.audio_meta_size + vid_context_p->file_size_info.video_meta_size +
vid_context_p->file_size_info.audio_rm_size + vid_context_p->file_size_info.video_rm_size);
sum = ((sum + 1) / cluster_size) * cluster_size;
if (vid_context_p->file_size_info.file_size_limit > sum)
{
return (vid_context_p->file_size_info.file_size_limit - sum + video_size -
vid_context_p->file_size_info.video_bitstream_size);
}
else
{
return 0;
}
}
else
{
sum = (video_size + vid_context_p->file_size_info.audio_bitstream_size +
vid_context_p->file_size_info.audio_rm_size + vid_context_p->file_size_info.video_rm_size);
if (vid_context_p->file_size_info.file_size_limit > sum)
{
return (vid_context_p->file_size_info.file_size_limit - sum);
}
else
{
return 0;
}
}
}
/*****************************************************************************
* FUNCTION
* vid_evaluate_audio_real_meta_file_size
* DESCRIPTION
* This function is to evaluate the current audio real meta size.
* PARAMETERS
* audio_record_time [IN]
* kal_uint32 audio_file_size(?)
* RETURNS
* kal_int32
*****************************************************************************/
kal_uint32 vid_evaluate_audio_real_meta_file_size(kal_uint64 audio_record_time)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
/* Only for AMR, not for WAMR */
return (((audio_record_time * 213) >> 10) + 500);
//return audio_record_time (ms) / 20 * 4.16 + 500;
//return (3*audio_file_size+200);
}
/*****************************************************************************
* FUNCTION
* vid_evaluate_audio_meta_file_size
* DESCRIPTION
* This function is to evaluate the current audio meta size.
* PARAMETERS
* audio_record_time [IN]
* kal_uint32 audio_file_size(?)
* RETURNS
* kal_int32
*****************************************************************************/
kal_uint32 vid_evaluate_audio_meta_file_size(kal_uint64 audio_record_time)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
/* Only for AMR, not for WAMR */
return ((audio_record_time / 20) + 50);
}
/*****************************************************************************
* FUNCTION
* vid_file_visual_residual_size
* DESCRIPTION
* This function is to get the residual file size for visual data.
* PARAMETERS
* void
* RETURNS
* kal_uint32
*****************************************************************************/
kal_uint32 vid_file_visual_residual_size(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
kal_uint32 video_size;
kal_uint32 audio_size;
kal_uint32 sum;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (vid_context_p->use_pseudo_merge)
{
kal_uint32 cluster_size;
cluster_size = vid_context_p->file_size_info.disk_cluster_size;
video_size = (vid_context_p->file_size_info.video_bitstream_size + (cluster_size - 1)) / (cluster_size);
video_size = video_size * cluster_size;
audio_size = (vid_context_p->file_size_info.audio_bitstream_size + (cluster_size - 1)) / (cluster_size);
audio_size = audio_size * cluster_size;
sum = (video_size + audio_size +
vid_context_p->file_size_info.audio_meta_size + vid_context_p->file_size_info.video_meta_size +
vid_context_p->file_size_info.audio_rm_size + vid_context_p->file_size_info.video_rm_size);
sum = ((sum + 1) / cluster_size) * cluster_size;
if (vid_context_p->file_size_info.file_size_limit > sum)
{
return (vid_context_p->file_size_info.file_size_limit - sum + video_size -
vid_context_p->file_size_info.video_bitstream_size);
}
else
{
return (video_size - vid_context_p->file_size_info.video_bitstream_size);
}
}
else
{
kal_uint32 res1, res2;
sum = (vid_context_p->file_size_info.video_bitstream_size + vid_context_p->file_size_info.audio_bitstream_size +
vid_context_p->file_size_info.audio_rm_size + vid_context_p->file_size_info.video_rm_size);
if (vid_context_p->file_size_info.file_size_limit > sum)
{
res1 = (vid_context_p->file_size_info.file_size_limit - sum);
}
else
{
res1= 0;
}
//kal_prompt_trace(MOD_MED, "sum=%d, res1= %d", sum, res1);
sum = sum + vid_context_p->file_size_info.audio_bitstream_size;
if (vid_context_p->free_disc_space > sum+VIDEO_RECORD_MEM_MARGIN)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -