1.修复rtos下水印问题
This commit is contained in:
		
							parent
							
								
									87feaba1d0
								
							
						
					
					
						commit
						00504f1031
					
				
							
								
								
									
										2
									
								
								rtos/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto.h
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										2
									
								
								rtos/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto.h
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							| 
						 | 
				
			
			@ -72,7 +72,7 @@
 | 
			
		|||
#else
 | 
			
		||||
	#if PHOTO_PREVIEW_SLICE_ENC_FUNC || POWERON_FAST_SLICE_ENC
 | 
			
		||||
		#define    PHOTO_MAX_CAP_SIZE  					UIAPP_PHOTO_SIZE_40M	/* Max slice encode size */
 | 
			
		||||
		#define	   PHOTO_MIN_CAP_SIZE  		UIAPP_PHOTO_SIZE_2M		/* UI Menu only display options which size is larger than PHOTO_SLICE_ENC_MIN_CAP_SIZE */
 | 
			
		||||
		#define	   PHOTO_MIN_CAP_SIZE  					UIAPP_PHOTO_SIZE_2M		/* UI Menu only display options which size is larger than PHOTO_SLICE_ENC_MIN_CAP_SIZE */
 | 
			
		||||
	#else
 | 
			
		||||
		#define    PHOTO_MAX_CAP_SIZE  UIAPP_PHOTO_SIZE_12M
 | 
			
		||||
	#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										98
									
								
								rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastSliceEncode.c
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										98
									
								
								rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastSliceEncode.c
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							| 
						 | 
				
			
			@ -80,6 +80,25 @@ static UINT32 PhotoFast_SliceEncode_Get_Encode_Max_Bitrate(HD_VIDEO_PXLFMT vproc
 | 
			
		|||
static INT32 PhotoFast_SliceEncode_Get_Comm_Buffer(PhotoFast_MEM_Info* mem_info);
 | 
			
		||||
static INT32 PhotoFast_SliceEncode_Release_Comm_Buffer(PhotoFast_MEM_Info mem_info);
 | 
			
		||||
static INT32 PhotoFast_SliceEncode_Encode_Screennail(HD_VIDEO_FRAME* video_frame_in);
 | 
			
		||||
#if PHOTOFAST_FAST_STAMP == ENABLE
 | 
			
		||||
INT32 PhotoFastCapDateImprint_Src_GenYuvData(
 | 
			
		||||
		HD_VIDEO_FRAME  *video_frame,
 | 
			
		||||
		PhotoFast_SliceSize_Info* src_slice_info,
 | 
			
		||||
		PhotoFast_SliceSize_Info* dst_slice_info)
 | 
			
		||||
{
 | 
			
		||||
	HD_VIDEO_FRAME video_frame_src_stamp = *video_frame;
 | 
			
		||||
	UINT32 dst_last_slice_scale_height = (src_slice_info->last_slice_height *  dst_slice_info->slice_height) / src_slice_info->slice_height;
 | 
			
		||||
 | 
			
		||||
	if(dst_last_slice_scale_height > dst_slice_info->last_slice_height)
 | 
			
		||||
	{
 | 
			
		||||
		video_frame_src_stamp.dim.h = video_frame_src_stamp.dim.h - ((src_slice_info->last_slice_height * (dst_last_slice_scale_height - dst_slice_info->last_slice_height)) / dst_last_slice_scale_height);
 | 
			
		||||
		video_frame_src_stamp.ph[0] = video_frame_src_stamp.dim.h;
 | 
			
		||||
		video_frame_src_stamp.ph[1] = video_frame_src_stamp.dim.h;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return PhotoFastCapDateImprint_GenYuvData(&video_frame_src_stamp);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static UINT32 PhotoFast_PHY2VIRT(UINT32 pa_pos, UINT32 pa_start, UINT32 va)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -187,7 +206,8 @@ INT32 PhotoFast_SliceEncode_Get_Curr_Dst_Slice_Info(PhotoFast_SliceSize_Info *in
 | 
			
		|||
		PHOTOFAST_SLICE_ENC_DUMP("cap_size = %lu buf_size = %lu\n", cap_size, buf_size);
 | 
			
		||||
 | 
			
		||||
		UINT32 lines = (buf_size / cap_size_w);
 | 
			
		||||
		max_slice_num = cap_size_h / lines + (cap_size_h % lines ? 1 : 0);
 | 
			
		||||
		UINT32 slice_height = ALIGN_CEIL(lines, 16);
 | 
			
		||||
		max_slice_num = (cap_size_h / slice_height) + (cap_size_h % slice_height ? 1 : 0);
 | 
			
		||||
 | 
			
		||||
		UINT32 tmp_src_h = src_frame.dim.h / 2;
 | 
			
		||||
		UINT32 tmp_dst_h = cap_size_h / 16;
 | 
			
		||||
| 
						 | 
				
			
			@ -249,7 +269,8 @@ static UINT32 PhotoFast_SliceEncode_Get_Max_Dst_Slice_Info(PhotoFast_SliceSize_I
 | 
			
		|||
				PHOTOFAST_SLICE_ENC_DUMP("cap_size = %lu buf_size = %lu\n", tmp_cap_size.w * tmp_cap_size.h, buf_size);
 | 
			
		||||
 | 
			
		||||
				UINT32 lines = (buf_size / tmp_cap_size.w);
 | 
			
		||||
				max_slice_num = tmp_cap_size.h / lines + (tmp_cap_size.h % lines ? 1 : 0);
 | 
			
		||||
				UINT32 slice_height = ALIGN_CEIL(lines, 16);
 | 
			
		||||
				max_slice_num = (tmp_cap_size.h / slice_height) + (tmp_cap_size.h % slice_height ? 1 : 0);
 | 
			
		||||
 | 
			
		||||
				UINT32 tmp_src_h = sensor_info->sSize.h / 2;
 | 
			
		||||
				UINT32 tmp_dst_h = tmp_cap_size.h / 16;
 | 
			
		||||
| 
						 | 
				
			
			@ -708,7 +729,8 @@ static INT32  PhotoFast_SliceEncode_Init_VF_GFX_Slice(
 | 
			
		|||
	UINT32 offset;
 | 
			
		||||
	UINT32 scr_slice_height = (slice_idx == (src_slice_info.slice_num - 1)) ? src_slice_info.last_slice_height : src_slice_info.slice_height;
 | 
			
		||||
	UINT32 dst_slice_height = (slice_idx == (dst_slice_info.slice_num - 1)) ? dst_slice_info.last_slice_height : dst_slice_info.slice_height;
 | 
			
		||||
	UINT32 dst_scale_slice_height = (slice_idx == (dst_slice_info.slice_num - 1)) ? (src_slice_info.last_slice_height *  dst_slice_info.slice_height / src_slice_info.slice_height) : dst_slice_info.slice_height;
 | 
			
		||||
 | 
			
		||||
	UINT32 dst_scale_slice_height = (slice_idx == (dst_slice_info.slice_num - 1)) ? (src_slice_info.last_slice_height * dst_slice_info.slice_height / src_slice_info.slice_height) : dst_slice_info.slice_height;
 | 
			
		||||
 | 
			
		||||
	/* dst img */
 | 
			
		||||
	addr_dst[0] = dst_buffer_info.pa;
 | 
			
		||||
| 
						 | 
				
			
			@ -1900,28 +1922,20 @@ static lfqueue_t queue23 = {0};
 | 
			
		|||
 | 
			
		||||
INT32 PhotoFast_Sliceencode2_Enq_Frame(const HD_VIDEO_FRAME* video_frame)
 | 
			
		||||
{
 | 
			
		||||
	if(lfqueue_size(&queue12) >= PHOTOFAST_SLICE_ENC_QUEUE12_MAX_SIZE){
 | 
			
		||||
		return E_SYS;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	PhotoFast_SliceEncode_Queue12_Param* queue_ele_out = NULL;
 | 
			
		||||
	queue_ele_out = (PhotoFast_SliceEncode_Queue12_Param*) malloc(sizeof(PhotoFast_SliceEncode_Queue12_Param));
 | 
			
		||||
	memset(queue_ele_out, 0, sizeof(PhotoFast_SliceEncode_Queue12_Param));
 | 
			
		||||
	queue_ele_out->frame = *video_frame;
 | 
			
		||||
 | 
			
		||||
    while(1)
 | 
			
		||||
    {
 | 
			
		||||
        if(lfqueue_size(&queue12) >= PHOTOFAST_SLICE_ENC_QUEUE12_MAX_SIZE)
 | 
			
		||||
                {
 | 
			
		||||
            vos_util_delay_ms(1);
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
                {
 | 
			
		||||
            while(lfqueue_enq(&queue12, (void*)queue_ele_out) == -1)
 | 
			
		||||
            {
 | 
			
		||||
                vos_util_delay_ms(1);
 | 
			
		||||
                DBG_ERR("ENQ Full ?\r\n");
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
	while (lfqueue_enq(&queue12, (void*) queue_ele_out) == -1)
 | 
			
		||||
	{
 | 
			
		||||
		vos_util_delay_ms(1);
 | 
			
		||||
		DBG_ERR("ENQ Full ?\r\n");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return E_OK;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1949,7 +1963,6 @@ INT32 PhotoFast_SliceEncode_CB2(void* user_data)
 | 
			
		|||
	PhotoFast_SliceEncode_Queue12_Param* queue_ele_in = NULL;
 | 
			
		||||
	PhotoFast_SliceEncode_Queue23_Param* queue_ele_out = NULL;
 | 
			
		||||
	HD_RESULT hd_ret = HD_OK;
 | 
			
		||||
//	PHOTO_VID_IN vid_in = PHOTO_VID_IN_1;
 | 
			
		||||
	PhotoFast_SliceEncode_Info* slice_encode_primary_info = PhotoFast_SliceEncode_Get_Info(PHOTO_ENC_JPG_PRIMARY);
 | 
			
		||||
	PhotoFast_SliceEncode_Info* slice_encode_screennail_info = PhotoFast_SliceEncode_Get_Info(PHOTO_ENC_JPG_SCREENNAIL);
 | 
			
		||||
	PhotoFast_SliceEncode_Info* slice_encode_thumbnail_info = PhotoFast_SliceEncode_Get_Info(PHOTO_ENC_JPG_THUMBNAIL);
 | 
			
		||||
| 
						 | 
				
			
			@ -1963,7 +1976,6 @@ INT32 PhotoFast_SliceEncode_CB2(void* user_data)
 | 
			
		|||
	UINT32 enc_accum_size = 0;
 | 
			
		||||
	static UINT8 primary_quality = CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_PRIMARY;
 | 
			
		||||
	static UINT8 screennail_quality = CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_SCREENNAIL;
 | 
			
		||||
//	PHOTO_CAP_CBMSG_FP  PhotoCapMsgCb = (PHOTO_CAP_CBMSG_FP)Photo_CaptureCB;
 | 
			
		||||
 | 
			
		||||
	if(!user_data){
 | 
			
		||||
		DBG_ERR("user_data can't be null!\n");
 | 
			
		||||
| 
						 | 
				
			
			@ -2035,14 +2047,7 @@ INT32 PhotoFast_SliceEncode_CB2(void* user_data)
 | 
			
		|||
			goto EXIT;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		DBG_DUMP("process frame %lu\n", param->cnt);
 | 
			
		||||
 | 
			
		||||
		/*******************************************************************
 | 
			
		||||
		 * Fast Stamp (higher speed, lower quality)
 | 
			
		||||
		 ******************************************************************/
 | 
			
		||||
#if PHOTOFAST_FAST_STAMP
 | 
			
		||||
		PhotoFastCapDateImprint_GenYuvData(&queue_ele_in->frame);
 | 
			
		||||
#endif
 | 
			
		||||
		DBG_IND("process frame %lu\n", param->cnt);
 | 
			
		||||
 | 
			
		||||
		/*******************************************************************
 | 
			
		||||
		 * Calculate dst slice info
 | 
			
		||||
| 
						 | 
				
			
			@ -2056,6 +2061,15 @@ INT32 PhotoFast_SliceEncode_CB2(void* user_data)
 | 
			
		|||
		 ******************************************************************/
 | 
			
		||||
		PhotoFast_SliceEncode_Get_Src_Slice_Info(&dst_slice_info, &src_slice_info, queue_ele_in->frame);
 | 
			
		||||
 | 
			
		||||
#if PHOTOFAST_FAST_STAMP == ENABLE
 | 
			
		||||
		/*******************************************************************
 | 
			
		||||
		 * Stamp on the src frame
 | 
			
		||||
		 ******************************************************************/
 | 
			
		||||
		if(PhotoFastCapDateImprint_Src_GenYuvData(&queue_ele_in->frame, &src_slice_info, &dst_slice_info) != E_OK){
 | 
			
		||||
			goto EXIT;
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		slice_encode_primary_info->bs_buf_mem_info.blk_size =  (VDO_YUV_BUFSIZE(dst_slice_info.width, dst_slice_info.height, queue_ele_in->frame.pxlfmt) / (CFG_PHOTOFAST_SLICE_ENC_BS_BUF_RATIO)) + CFG_JPG_HEADER_SIZE + PhotoFast_GetScreenNailSize() ;
 | 
			
		||||
		if(PhotoFast_SliceEncode_Alloc_Buffer_Retry(
 | 
			
		||||
				&slice_encode_primary_info->bs_buf_mem_info,
 | 
			
		||||
| 
						 | 
				
			
			@ -2201,17 +2215,16 @@ INT32 PhotoFast_SliceEncode_CB2(void* user_data)
 | 
			
		|||
 | 
			
		||||
        while(1)
 | 
			
		||||
        {
 | 
			
		||||
            if(lfqueue_size(param->queue23) >= PHOTOFAST_SLICE_ENC_QUEUE23_MAX_SIZE)
 | 
			
		||||
                        {
 | 
			
		||||
            if(lfqueue_size(param->queue23) >= PHOTOFAST_SLICE_ENC_QUEUE23_MAX_SIZE){
 | 
			
		||||
                vos_util_delay_ms(1);
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
                        {
 | 
			
		||||
                while(lfqueue_enq(param->queue23, (void*)queue_ele_out) == -1)
 | 
			
		||||
            else{
 | 
			
		||||
                while (lfqueue_enq(param->queue23, (void*) queue_ele_out) == -1)
 | 
			
		||||
                {
 | 
			
		||||
                    DBG_ERR("ENQ Full ?\r\n");
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -2267,6 +2280,7 @@ INT32 PhotoFast_SliceEncode_CB3(void* user_data)
 | 
			
		|||
	INT32 ret = E_OK;
 | 
			
		||||
	PhotoFast_SliceEncode_CB3_Param* param = NULL;
 | 
			
		||||
	PhotoFast_SliceEncode_Queue23_Param* queue_ele_in = NULL;
 | 
			
		||||
	VOS_TICK t1, t2, t3, t4;
 | 
			
		||||
 | 
			
		||||
	if(!user_data){
 | 
			
		||||
		DBG_ERR("user_data can't be null!\n");
 | 
			
		||||
| 
						 | 
				
			
			@ -2305,6 +2319,8 @@ INT32 PhotoFast_SliceEncode_CB3(void* user_data)
 | 
			
		|||
			goto EXIT;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		vos_perf_mark(&t1);
 | 
			
		||||
 | 
			
		||||
#if !PHOTOFAST_FAST_CLOSE
 | 
			
		||||
		PhotoFast_WriteFile(
 | 
			
		||||
				(UINT32)queue_ele_in->jpg_combined_addr,
 | 
			
		||||
| 
						 | 
				
			
			@ -2321,6 +2337,8 @@ INT32 PhotoFast_SliceEncode_CB3(void* user_data)
 | 
			
		|||
				queue_ele_in->file_path);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		vos_perf_mark(&t2);
 | 
			
		||||
 | 
			
		||||
		{
 | 
			
		||||
			char tmp[NMC_TOTALFILEPATH_MAX_LEN] = {'\0'};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2352,6 +2370,8 @@ INT32 PhotoFast_SliceEncode_CB3(void* user_data)
 | 
			
		|||
#endif
 | 
			
		||||
			DBG_IND("PHOTO THUMB %s\n", tmp);
 | 
			
		||||
 | 
			
		||||
			vos_perf_mark(&t3);
 | 
			
		||||
 | 
			
		||||
			FST_FILE fp = FileSys_OpenFile(tmp, FST_CREATE_ALWAYS | FST_OPEN_WRITE);
 | 
			
		||||
 | 
			
		||||
			FileSys_WriteFile(fp, (UINT8*)queue_ele_in->jpg_thumb_addr, &queue_ele_in->jpg_thumb_size, 0, NULL);
 | 
			
		||||
| 
						 | 
				
			
			@ -2368,6 +2388,14 @@ INT32 PhotoFast_SliceEncode_CB3(void* user_data)
 | 
			
		|||
#endif
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		vos_perf_mark(&t4);
 | 
			
		||||
 | 
			
		||||
		DBG_DUMP("CB3 cost %lu ms(%lu , %lu , %lu)\n", 	
 | 
			
		||||
		vos_perf_duration(t1, t4) / 1000,
 | 
			
		||||
		vos_perf_duration(t1, t2) / 1000,
 | 
			
		||||
		vos_perf_duration(t2, t3) / 1000,
 | 
			
		||||
		vos_perf_duration(t3, t4) / 1000
 | 
			
		||||
		);
 | 
			
		||||
 | 
			
		||||
		/* check user bs buffer is freed */
 | 
			
		||||
		if(queue_ele_in->mem_info_combined.va){
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user