Exemple #1
0
void init_cache(void)
{
	CSL_sysInit();
	MDMA_PRIARB_REG = 0x00000000;
	CACHE_wbInvAllL2(CACHE_WAIT);
#ifdef _CAMERA_PIXEL_500W_
	InitEMIF_32M();
#else
	InitEMIF();
#endif
	CACHE_setL1dSize(CACHE_L1_32KCACHE);
	CACHE_setL1pSize(CACHE_L1_32KCACHE);
	CACHE_setL2Size(CACHE_32KCACHE);
	CACHE_wbInvAllL2(CACHE_WAIT);
}
Exemple #2
0
/******************************************************************************
* flushCache 
******************************************************************************/
static void flushCache (void)
{
    uint32_t  key;

    /* Disable Interrupts */
    key = _disable_interrupts();
    CSL_XMC_invalidatePrefetchBuffer();

    /*-------------------------------------------------------------------------
    * Also flushes L1P and L1D. 
    *------------------------------------------------------------------------*/
    CACHE_wbInvAllL2(CACHE_NOWAIT);

    _mfence();
    asm(" NOP 9");
    asm(" NOP 7");

    /* Reenable Interrupts. */
    _restore_interrupts(key);
}
Exemple #3
0
/*****************************************************************************
 * Prototype : jpeg_decode
 * description  : JPEG Decode
 * Input :   Uint8 *pin_buf
                   Uint8 *pout_buf
                   Uint32 dim
 * Output : None
 * Return Value :
 * Calls :
 * Called By  :

 * Modification History :
 * 1.Date : 2013/10/17
 *   Author : Gzz
 *   Modification : Created function

*****************************************************************************/
void jpeg_decode(Uint8 *pin_buf, Uint8 *pout_buf, Uint32 dim )
{
    /* Input/Output Buffer Descriptors                                          */
    XDM1_BufDesc inputBufDesc, outputBufDesc;
    IIMGDEC1_Fxns *IIMGDEC1Fxns;

    /*record decoded last byte num*/
    XDAS_UInt32 bytesConsumed = 0;

    FILE *fp ;

    fp = fopen("E:\\jpeg8.jpg", "rb");
    fread(jpeg,1, 33052,fp);
    fclose(fp);
    
    JPEGDEC_Status	status;
    JPEGDEC_InArgs	inArgs;
    JPEGDEC_OutArgs	outArgs;
    JPEGDEC_DynamicParams dynamic_params;

    status.imgdecStatus.size = sizeof(IJPEGDEC_Status);
    inArgs.imgdecInArgs.size = sizeof(IJPEGDEC_InArgs);
    inArgs.imgdecInArgs.numBytes = dim;//带解码的JPEG图像大小
    outArgs.imgdecOutArgs.size = sizeof(IJPEGDEC_OutArgs);

    memcpy((void *)&dynamic_params, (void *)&decode_dynamic_default_params, sizeof(JPEGDEC_DynamicParams));
    dynamic_params.imgdecDynamicParams.decodeHeader = XDM_PARSE_HEADER;//解析信息头
    dynamic_params.frame_numbytes = dim; //一帧JPEG的图像大小

    /* set space for buffer descriptors  */
    inputBufDesc.descs[0].buf = (XDAS_Int8 *)jpeg;
    inputBufDesc.descs[0].bufSize = (XDAS_Int32 )dim;
    outputBufDesc.descs[0].buf = (XDAS_Int8 *)yuv;
    outputBufDesc.descs[0].bufSize = (XDAS_Int32)JPEG_DECODE_INPUT_BUFFER_SIZE ;
  
    IIMGDEC1Fxns = (IIMGDEC1_Fxns *)jpeg_decode_handle->fxns;
    jpeg_decode_handle->fxns->algActivate(jpeg_decode_handle);

    /* Get Buffer information                                              */
    IIMGDEC1Fxns->control((IIMGDEC1_Handle)jpeg_decode_handle, XDM_GETBUFINFO,
    (IIMGDEC1_DynamicParams *)&dynamic_params,
    (IIMGDEC1_Status *)&status);//获取buffer的信息

    /* Fill up the buffers as required by algorithm                        */
    inputBufDesc.numBufs = status.imgdecStatus.bufInfo.minNumInBufs ;//算法需要的输入缓存区的最小buf个数
    inputBufDesc.descs[0].bufSize = status.imgdecStatus.bufInfo.minInBufSize[0];//根据算法需求返回的buffer信息。
    outputBufDesc.numBufs = status.imgdecStatus.bufInfo.minNumOutBufs ;
    outputBufDesc.descs[0].bufSize = status.imgdecStatus.bufInfo.minOutBufSize[0];

    IIMGDEC1Fxns->control((IIMGDEC1_Handle)jpeg_decode_handle, XDM_SETPARAMS,
        (IIMGDEC1_DynamicParams *)&dynamic_params,
        (IIMGDEC1_Status *)&status);//设置算法所需的参数

    /* Basic Algorithm process() call   */
    IIMGDEC1Fxns->process((IIMGDEC1_Handle)jpeg_decode_handle,
       (XDM1_BufDesc *)&inputBufDesc,
	(XDM1_BufDesc *)&outputBufDesc,
	(IIMGDEC1_InArgs *)&inArgs,
	(IIMGDEC1_OutArgs *)&outArgs);//处理头信息

    CACHE_wbInvAllL1d(CACHE_WAIT);
    CACHE_wbInvAllL2(CACHE_WAIT);  //cache back to DDR2

    IIMGDEC1Fxns->control((IIMGDEC1_Handle)jpeg_decode_handle, XDM_GETSTATUS,
        (IIMGDEC1_DynamicParams *)&dynamic_params,
        (IIMGDEC1_Status *)&status);//获取当前状态

    dynamic_params.imgdecDynamicParams.decodeHeader = XDM_DECODE_AU;//解码数据单元
    IIMGDEC1Fxns->control((IIMGDEC1_Handle)jpeg_decode_handle, XDM_RESET,
        (IIMGDEC1_DynamicParams *)&dynamic_params,
        (IIMGDEC1_Status *)&status);//复位所有的结构体和算法buffer被flash

    bytesConsumed = 0;

    /* DeActivate the Algorithm */
//    jpeg_decode_handle->fxns->algDeactivate(jpeg_decode_handle);

    /* Do-While Loop for Decode Call     */
    do
    {
        IIMGDEC1Fxns->control((IIMGDEC1_Handle)jpeg_decode_handle, XDM_GETBUFINFO,
            (IIMGDEC1_DynamicParams *)&dynamic_params,
            (IIMGDEC1_Status *)&status);//获取buffer的信息
            
        /* Fill up the buffers as required by algorithm                        */
        inputBufDesc.numBufs = status.imgdecStatus.bufInfo.minNumInBufs ;//算法需要的输入缓存区的最小buf个数
        inputBufDesc.descs[0].bufSize = status.imgdecStatus.bufInfo.minInBufSize[0];//根据算法需求返回的buffer信息。
        outputBufDesc.numBufs = status.imgdecStatus.bufInfo.minNumOutBufs ;
        outputBufDesc.descs[0].bufSize = status.imgdecStatus.bufInfo.minOutBufSize[0];
         
        IIMGDEC1Fxns->control((IIMGDEC1_Handle)jpeg_decode_handle, XDM_SETPARAMS,
            (IIMGDEC1_DynamicParams *)&dynamic_params,
            (IIMGDEC1_Status *)&status);//设置算法所需的参数
  
        IIMGDEC1Fxns->process((IIMGDEC1_Handle)jpeg_decode_handle,
            (XDM1_BufDesc *)&inputBufDesc,
            (XDM1_BufDesc *)&outputBufDesc,
            (IIMGDEC1_InArgs *)&inArgs,
            (IIMGDEC1_OutArgs *)&outArgs);//解码处理
            
        bytesConsumed += outArgs.imgdecOutArgs.bytesConsumed;//记录一次编码完成的字节数

        CACHE_wbInvAllL1d(CACHE_WAIT);
        CACHE_wbInvAllL2(CACHE_WAIT);  //cache back to DDR2

        IIMGDEC1Fxns->control((IIMGDEC1_Handle)jpeg_decode_handle, XDM_GETSTATUS,
            (IIMGDEC1_DynamicParams *)&dynamic_params,
            (IIMGDEC1_Status *)&status);//获取解码后的状态

        if(status.end_of_seq)
         {
            break;//解码完成标志
         }
    }while(1);

    jpeg_decode_handle->fxns->algDeactivate(jpeg_decode_handle);
    jpeg_decode_handle->fxns->algFree(jpeg_decode_handle, (IALG_MemRec *)dec_memTab);
    

}
Exemple #4
0
void jpeg_encode(Uint8 *pin_buf, Uint8 *pout_buf)
{
	FILE *fp ;
	Uint8 file_name[256];
	static Uint32 num_frame = 0;
	sprintf(file_name, "E://test_jpeg//jpeg%d.jpg",num_frame);
	num_frame++;

	/* Input/Output Buffer Descriptors                                          */
    XDM1_BufDesc inputBufDesc, outputBufDesc;
    IIMGENC1_Fxns *IIMGENC1Fxns;

    /*record had encoded byte num*/
    XDAS_UInt32 TotalBytes = 0;

    IIMGENC1_Status	status;
    IIMGENC1_InArgs	inArgs;
    IIMGENC1_OutArgs	outArgs;
    IIMGENC1_DynamicParams dynamic_params;

    status.size = sizeof(IIMGENC1_Status);
    status.extendedError = 0;
    inArgs.size = sizeof(IIMGENC1_InArgs);
    outArgs.size = sizeof(IIMGENC1_OutArgs);
    outArgs.extendedError = 0;
    outArgs.bytesGenerated = 0;
    outArgs.currentAU = 0;

    fp = fopen(file_name,"wb");

    memcpy((void *)&dynamic_params, (void *)&encode_dynamic_default_params, sizeof(IIMGENC1_DynamicParams));
    dynamic_params.generateHeader = XDM_ENCODE_AU;//直接编码AU

    IIMGENC1Fxns = (IIMGENC1_Fxns *)jpeg_encode_handle->fxns;
    
    /* Activate the Algorithm                                               */
    jpeg_encode_handle->fxns->algActivate(jpeg_encode_handle);

    IIMGENC1Fxns->control((IIMGENC1_Handle)jpeg_encode_handle, XDM_SETPARAMS,
        (IIMGENC1_DynamicParams *)&dynamic_params,
        (IIMGENC1_Status *)&status);//设置算法所需的参数

    IIMGENC1Fxns->control((IIMGENC1_Handle)jpeg_encode_handle, XDM_GETBUFINFO,
    	(IIMGENC1_DynamicParams *)&dynamic_params,
    	(IIMGENC1_Status *)&status);//获取输入输出buffer的信息
    	
    /* DeActivate the Algorithm                                               */
    jpeg_encode_handle->fxns->algDeactivate(jpeg_encode_handle);

    /* set space for buffer descriptors                                      */
    inputBufDesc.numBufs  = status.bufInfo.minNumInBufs ;
    inputBufDesc.descs[0].bufSize = status.bufInfo.minInBufSize[0] ;
    inputBufDesc.descs[0].buf = (XDAS_Int8 *)pin_buf;

    outputBufDesc.descs[0].buf = (XDAS_Int8 *)pout_buf;
    outputBufDesc.numBufs  = status.bufInfo.minNumOutBufs ;
    outputBufDesc.descs[0].bufSize = status.bufInfo.minOutBufSize[0] ;

    /* Activate the Algorithm                                               */
    jpeg_encode_handle->fxns->algActivate(jpeg_encode_handle);

    IIMGENC1Fxns->control((IIMGENC1_Handle)jpeg_encode_handle, XDM_SETPARAMS,
        (IIMGENC1_DynamicParams *)&dynamic_params,
        (IIMGENC1_Status *)&status);//设置算法所需的参数

    /* Basic Algorithm process() call   */
    IIMGENC1Fxns->process((IIMGENC1_Handle)jpeg_encode_handle,
       (XDM1_BufDesc *)&inputBufDesc,
	(XDM1_BufDesc *)&outputBufDesc,
	(IIMGENC1_InArgs *)&inArgs,
	(IIMGENC1_OutArgs *)&outArgs);//处理信息

    CACHE_wbInvAllL1d(CACHE_WAIT);
    CACHE_wbInvAllL2(CACHE_WAIT);

    TotalBytes += outArgs.bytesGenerated;
    fwrite(pout_buf,1,TotalBytes,fp);
    DEBUG("Out JPEG bytes = %d", TotalBytes);
    DEBUG("compress_rate = %d%%", IMAGE_TOTAL_SIZE/TotalBytes);
    fclose(fp);

    IIMGENC1Fxns->control((IIMGENC1_Handle)jpeg_encode_handle, XDM_SETPARAMS,
        (IIMGENC1_DynamicParams *)&dynamic_params,
        (IIMGENC1_Status *)&status);//设置算法所需的参数

    while (outArgs.currentAU < status.totalAU)//如果当前编码输出的AU比实际的要小,就继续编码
    {
	  /* Basic Algorithm process() call */
        IIMGENC1Fxns->process((IIMGENC1_Handle)jpeg_encode_handle,
            (XDM1_BufDesc *)&inputBufDesc,(XDM1_BufDesc *)&outputBufDesc,
            (IIMGENC1_InArgs *)&inArgs,
            (IIMGENC1_OutArgs *)&outArgs);//处理信息
            
        TotalBytes +=outArgs.bytesGenerated;

        CACHE_wbInvAllL1d(CACHE_WAIT);
        CACHE_wbInvAllL2(CACHE_WAIT);
            IIMGENC1Fxns->control((IIMGENC1_Handle)jpeg_encode_handle, XDM_SETPARAMS,
        (IIMGENC1_DynamicParams *)&dynamic_params,
        (IIMGENC1_Status *)&status);//设置算法所需的参数
        
    }

    jpeg_encode_handle->fxns->algDeactivate(jpeg_encode_handle);
    jpeg_encode_handle->fxns->algFree(jpeg_encode_handle, (IALG_MemRec *)enc_memTab);

}