|
我想使用STM32H7B0进行JPEG图片的硬解,然后通过DMA2D将格式转为RGB565,缓存是初始化一个数组存储,然后使用SPI通讯ST7789芯片的显示屏传输缓存,显示图片。
现在已经硬解完成了,卡在DMA2D格式转为RGB565这一步,想问问这个的路线可以实现吗?
static void DMA2D_CopyBuffer(uint32_t *pSrc, uint32_t *pDst, uint16_t x, uint16_t y, uint16_t xsize, uint16_t ysize, uint32_t ChromaSampling)
{
uint32_t cssMode = DMA2D_CSS_420, inputLineOffset = 0;
uint32_t destination = 0;
if(ChromaSampling == JPEG_420_SUBSAMPLING)
{
cssMode = DMA2D_CSS_420;
inputLineOffset = xsize % 16;
if(inputLineOffset != 0)
{
inputLineOffset = 16 - inputLineOffset;
}
}
else if(ChromaSampling == JPEG_444_SUBSAMPLING)
{
cssMode = DMA2D_NO_CSS;
inputLineOffset = xsize % 8;
if(inputLineOffset != 0)
{
inputLineOffset = 8 - inputLineOffset;
}
}
else if(ChromaSampling == JPEG_422_SUBSAMPLING)
{
cssMode = DMA2D_CSS_422;
inputLineOffset = xsize % 16;
if(inputLineOffset != 0)
{
inputLineOffset = 16 - inputLineOffset;
}
}
/*##-1- Configure the DMA2D Mode, Color Mode and output offset #############*/
DMA2D_Handle.Init.Mode = DMA2D_M2M;
DMA2D_Handle.Init.ColorMode = DMA2D_OUTPUT_RGB565;
DMA2D_Handle.Init.OutputOffset = 240 - xsize;
DMA2D_Handle.Init.AlphaInverted = DMA2D_REGULAR_ALPHA; /* No Output Alpha Inversion*/
DMA2D_Handle.Init.RedBlueSwap = DMA2D_RB_REGULAR; /* No Output Red & Blue swap */
/*##-2- DMA2D Callbacks Configuration ######################################*/
DMA2D_Handle.XferCpltCallback = NULL;
/*##-3- Foreground Configuration ###########################################*/
DMA2D_Handle.LayerCfg[1].AlphaMode = DMA2D_REPLACE_ALPHA;
DMA2D_Handle.LayerCfg[1].InputAlpha = 0xFF;
DMA2D_Handle.LayerCfg[1].InputColorMode = DMA2D_INPUT_YCBCR;
DMA2D_Handle.LayerCfg[1].ChromaSubSampling = cssMode;
DMA2D_Handle.LayerCfg[1].InputOffset = inputLineOffset;
DMA2D_Handle.LayerCfg[1].RedBlueSwap = DMA2D_RB_REGULAR; /* No ForeGround Red/Blue swap */
DMA2D_Handle.LayerCfg[1].AlphaInverted = DMA2D_REGULAR_ALPHA; /* No ForeGround Alpha inversion */
DMA2D_Handle.Instance = DMA2D;
/*##-4- DMA2D Initialization ###########################################*/
HAL_DMA2D_Init(&DMA2D_Handle);
HAL_DMA2D_ConfigLayer(&DMA2D_Handle, 1);
/*##-5- copy the new decoded frame to the LCD Frame buffer ################*/
destination = (uint32_t)pDst + ((y *320) + x) * 2 ;// + ((y *320) + x) * 4
HAL_DMA2D_Start(&DMA2D_Handle, (uint32_t)pSrc, destination, xsize, ysize);
HAL_DMA2D_PollForTransfer(&DMA2D_Handle, 25); /* wait for the previous DMA2D transfer to ends */
这个是我使用例程的函数
由于我不是通过LTDC直接缓存刷入,这个函数是否需要修改?
|
|