设为首页 加入收藏

TOP

S3C6410 裸机硬件JPEG解码(六)
2014-11-24 07:40:31 来源: 作者: 【 】 浏览:11
Tags:S3C6410 裸机 硬件 JPEG 解码

JPEG_DecodeBody(ImageAddr); //解码JPEG
status = JPEG_WaitForIRQ(); //等待完成
if(status == JPEG_OK)
{
jpeg_debug("Jpeg decode OK(%d)\r\n",status);

}
else
{
jpeg_debug("Jpeg decode error(%d)\r\n",status);
return status;
}
}
JpegInfo->DataSize = JPEG_GetYUVSize(JpegInfo->Type,JpegInfo->Width,JpegInfo->Height);

return status; //返回错误
}



/*************************************************************************************************************************
*函数 : JPEG_ERROR JPEG_EncodeOneFrame(u32 JpgAddr, u32 ImageAddr, JPEG_INFO *JpegInfo)
*功能 : 压缩一张JPEG
*参数 : JpegAddr: jpeg图像地址
* ImageAddr: 解码后图像地址
* JpegInfo: 图像信息结构指针
*返回 : JPEG_ERROR
*依赖 : 无
*作者 : cp1300@139.com
*时间 : 20130114
*最后修改时间 : 201310114
*说明 : 只支持YCbCr4:2:2,YCbCr4:2:0的输入格式
* 只测试了编码,能成功,但是没有生成jpeg文件进行测试,如果要生成jpeg文件应该还需要添加相应的文件头和尾部。
*************************************************************************************************************************/
JPEG_ERROR JPEG_EncodeOneFrame(u32 JpgAddr, u32 ImageAddr, JPEG_QUALITY_TYPE jpegQuality, JPEG_INFO *JpegInfo)
{
JPEG_ERROR status = JPEG_OK;
u32 i;


if(JpegInfo->Width <= 0 || JpegInfo->Width > MAX_JPG_WIDTH || JpegInfo->Height <= 0 || JpegInfo->Height > MAX_JPG_HEIGHT)
{
return JPEG_SIZE_ERROR;
}

JPEG_Reset();
JPEG->Mode = (JpegInfo->Type == TYPE_JPEG_422) (0x01 << 0) : (0x02 << 0); //亚抽样模式
JPEG->RSTPos = 2; // MCU inserts RST marker
JPEG->QTblNo = (1 << 12) | (1 << 14);
JPEG->Horizontal = JpegInfo->Width;
JPEG->Vertical = JpegInfo->Height;


JPEG->ImageAddr0 = ImageAddr;
JPEG->ImageAddr1 = ImageAddr;
JPEG->JpegAddr0 = JpgAddr;
JPEG->JpegAddr1 = JpgAddr;

JPEG->COEF1 = COEF1_RGB_2_YUV; // Coefficient value 1 for RGB to YCbCr
JPEG->COEF2 = COEF2_RGB_2_YUV; // Coefficient value 2 for RGB to YCbCr
JPEG->COEF3 = COEF3_RGB_2_YUV; // Coefficient value 3 for RGB to YCbCr


JPEG->Misc = (1<<5) | (0<<2);
JPEG->Cntl = DISABLE_MOTION_ENC;

// Quantiazation and Huffman Table setting
for (i=0; i<64; i++)
JPEG->QTBL0[i] = (u32)QTBL_Luminance[jpegQuality][i];


for (i=0; i<64; i++)
JPEG->QTBL1[i] = (u32)QTBL_Chrominance[jpegQuality][i];


for (i=0; i<16; i++)
JPEG->HDCTBL0[i] = (u32)HDCTBL0[i];


for (i=0; i<12; i++)
JPEG->HDCTBLG0[i] = (u32)HDCTBLG0[i];


for (i=0; i<16; i++)
JPEG->HACTBL0[i] = (u32)HACTBL0[i];


for (i=0; i<162; i++)
JPEG->HACTBLG0[i] = (u32)HACTBLG0[i];


JPEG->Start = 0;

status = JPEG_WaitForIRQ();
if(status == JPEG_OK)
{
jpeg_debug("Jpeg encode OK!(%d)\r\n",status);
JpegInfo->FileSize = JPEG->DataSize;
}
else
{
JpegInfo->FileSize = 0;
jpeg_debug("Jpeg encode error!(%d)\r\n",status);
}

return status;
}



/*************************************************************************************************************************
*函数 : static bool JPEG_CorrectHeader(JPEG_TYPE jpegType, u16 *width, u16 *height)
*功能 : 检查图像的宽高时候满足要求
*参数 : jpegType: jpeg类型,见JPEG_TYPE
* width: 图像宽度
* height: 图像高度
*返回 : TRUE:需要重写宽度,高度
* FALSE:无需重写宽度,高度
*依赖 : 无
*作者 : cp1300@139.com
*时间 : 20130113
*最后修改时间 : 20130113
*说明 : 直接由S3C6410官方代码移植而来
* 如果不满足要求,将计算最接近的满足要求的分辨率,JPEG分辨率需要能被8或者16整除,具体可以查阅相关资料
*************************************************************************************************************************/
static bool JPEG_CorrectHeader(JPEG_TYPE jpegType, u16 *width, u16 *height)
{
bool result = FALSE;

首页 上一页 3 4 5 6 7 下一页 尾页 6/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇OK6410汇编程序练习 下一篇S3C6410 硬件JPEG解码无关代码影..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Asus Armoury Crate (2025-12-26 02:52:33)
·WindowsFX (LinuxFX) (2025-12-26 02:52:30)
·[ Linux运维学习 ] (2025-12-26 02:52:27)
·HTTPS 详解一:附带 (2025-12-26 02:20:37)
·TCP/IP协议到底在讲 (2025-12-26 02:20:34)