搜索
bottom↓
回复: 6

请教下,使用stm32f7x硬件解码avi视频+emwin并显示出现闪烁?

[复制链接]

出0入0汤圆

发表于 2018-8-19 17:17:07 | 显示全部楼层 |阅读模式
本帖最后由 hpdell 于 2018-8-19 17:22 编辑

请教下,使用stm32f7x硬件解码avi视频+emwin并显示出现闪烁?
都是使用 dma2d 输出

视频效果地址:
https://v.youku.com/v_show/id_XM ... j.8428770.3416059.1
视频中,SCB_CleanInvalidateDCache();      这个函数是没有屏蔽的

// **********************************************************************************************************************************************
在解码期间,如果屏蔽如下函数里面的 SCB_CleanInvalidateDCache 这个函数,显示画面比较稳定,不会出现闪烁,抖动的情况,但是显示的画面是黑丝或者有黑点条状:

static void AVI_HardDecodeFrame(uint16_t  _usX,
                                                                                                                                uint16_t  _usY,
                                                                                                                                unsigned int buf,
                                                                                                                                unsigned int size,
                                                                                                                                uint32_t AviOutAddrBuff)
{
  uint8_t  _JpegProcessing_End;
       
  AVI_JPEG_Decode_DMA(&JPEG_Handle, (uint32_t)buf, size , AviOutAddrBuff);  

  _JpegProcessing_End = 0;
  do
  {
//   SCB_CleanInvalidateDCache();                              //貌似跟这个有关,吧这个函数屏蔽后显示就不会闪烁了,但是貌似没有视频图像出来,画面如下所以  ?????????
    _JpegProcessing_End = JPEG_OutputHandler(&JPEG_Handle);
   
  }while(_JpegProcessing_End == 0);  


    HAL_JPEG_GetInfo(&JPEG_Handle, &JPEG_Info);
        AVI_DMA2D_Init(JPEG_Info.ImageWidth, JPEG_Info.ImageHeight);  
        AVI_DMA2D_CopyBuffer((uint32_t *)AviOutAddrBuff,
                                                                                                (uint32_t *)JPEG_LCD_FRAME_BUFFER,
                                                                                                _usX ,
                                                                                                _usY,
                                                                                                JPEG_Info.ImageWidth,
                                                                                                JPEG_Info.ImageHeight);
}

// **********************************************************************************************************************************************
屏蔽 SCB_CleanInvalidateDCache();      这个函数后显示的效果画面如下:










// ************************************************************************************************************************

如果不使用 emwin 这个是没有问题的


// dma2d 显示函数
static void AVI_DMA2D_CopyBuffer(uint32_t *pSrc, uint32_t *pDst, uint16_t _usX, uint16_t _usY, uint16_t ImageWidth, uint16_t ImageHeight)
{
        __IO uint32_t  XaddrPutPixel = 0, timeout=0;

    XaddrPutPixel = (BYTES_PER_PIXEL * (uint32_t)((_usY * LCD_PIXEL_WIDTH) + (_usX)));

                        {
                        // 查询法
                                DMA2D->CR     &= ~DMA2D_CR_START;   // 现停止 dma2d
                       
                                DMA2D->NLR &= ~(DMA2D_NLR_NL | DMA2D_NLR_PL);
                                DMA2D->NLR |= (ImageHeight | (ImageWidth << 16));
                 
                                DMA2D->OMAR    = (uint32_t)pDst + XaddrPutPixel;
                                DMA2D->FGMAR   = (uint32_t)pSrc ;
                               
                                DMA2D->CR     |= DMA2D_CR_START;   // 启动

                                while((DMA2D->ISR & (DMA2D_FLAG_TC)) == 0)          //等待传输完成
                                {
                                        timeout++;
                                        if(timeout > 0X1FFFFF) break;              //超时退出
                                }
                                        DMA2D->IFCR |= (DMA2D_FLAG_TC | DMA2D_FLAG_CTC);                                          //清除传输完成标志
                        }
               
}



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入234汤圆

发表于 2018-8-20 02:42:13 | 显示全部楼层
可以参考下我们阿波罗F7开发板的例程。

出0入0汤圆

 楼主| 发表于 2018-8-20 09:26:02 | 显示全部楼层
正点原子 发表于 2018-8-20 02:42
可以参考下我们阿波罗F7开发板的例程。

你好,阿波罗的历程里面貌似没有找到 emwin + 硬件解码jpg 播放视频的历程啊 ?

如果我不使用 emwin 的话,单独使用硬件解码jpg+播放avi视频是没有问题的,目前就是加了 emwin+硬件解码jpg+播放avi视频显示就不了 ?


是不是我 播放 avi 视频,显示没有按照 emwin 的套路走造成的啊 ?????????

出0入234汤圆

发表于 2018-8-21 01:30:21 | 显示全部楼层
hpdell 发表于 2018-8-20 09:26
你好,阿波罗的历程里面貌似没有找到 emwin + 硬件解码jpg 播放视频的历程啊 ?

如果我不使用 emwin 的 ...

哦,建议avi播放直接撇开EMWIN的内容。

出0入0汤圆

 楼主| 发表于 2018-8-21 09:41:16 | 显示全部楼层
正点原子 发表于 2018-8-21 01:30
哦,建议avi播放直接撇开EMWIN的内容。

再捣鼓看看,如果万一不行就算了,不折腾了

出0入0汤圆

发表于 2018-11-6 11:46:58 | 显示全部楼层
请教楼主,你播放视频,需要用到什么样的ram资源?

出0入0汤圆

 楼主| 发表于 2018-11-6 21:13:32 | 显示全部楼层
sinc_mark 发表于 2018-11-6 11:46
请教楼主,你播放视频,需要用到什么样的ram资源?

硬件解码 jpg,sdram
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 21:43

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表