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

📄 vid_msg_handler.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 5 页
字号:
 *
 * 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 + -