导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

    【FAQ】全志V系列芯片 如何生成拍照缩略图和视频缩略图?

    其它全志芯片讨论区
    v853 v851 v831 faq 技术支持
    1
    1
    1648
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • q1215200171
      budbool LV 9 最后由 编辑

      适用范围

      只适用于V系列,并使用MPP多媒体框架。

      拍照缩略图的处理

      设置JPEG编码生成缩略图
      在创建一个JPEG编码的通路时,想要同时生成缩略图,其实很简单,只需要在调用AW_MPI_VENC_SendFrame之前调用AW_MPI_VENC_SetJpegExifInfo设置缩略图属性即可。

      VENC_EXIFINFO_S stExifInfo;
      memset(&stExifInfo, 0, sizeof(VENC_EXIFINFO_S));
      stExifInfo.ThumbWidth = thumbnailWidth;
      stExifInfo.ThumbHeight = thumbnailHeight;
      stExifInfo.thumb_quality = thumbnailQuality;
      stExifInfo.Orientation = mJpegRotate;
      AW_MPI_VENC_SetJpegExifInfo(vechn, &stExifInfo);
      AW_MPI_VENC_SendFrame(vechn, &frmInfo);
      

      获取缩略图

      通过调用接口AW_MPI_VENC_GetJpegThumbBuffer,我们可以得到缩略图buffer的起始指针,和其大小。需要注意的是,缩略图并不是单独的buffer,而是保存在整个JPEG图像数据中的。

      我们可以通过比较缩略的起始地址指针和JPEG图像数据的起始指针,得到其在JEPG文件中的偏移位置。同时由于JPEG文件的格式,我们可以在保存JPEG文件时,将得出的缩略图偏移量和大小写入到文件尾部,当需要缩略图去显示的时候,能更方便的获取到缩略图数据。

      int getThumbOffset(VENC_STREAM_S *pVencStream, VENC_JPEG_THUMB_BUFFER_S *pThumbBuf, off_t *pThumbOffset)
      {
          if (NULL == pVencStream || NULL == pThumbBuf)
          {
              aloge("fatal error! why parameter is null!");
              return -1;
          }
      
          if (pThumbBuf->ThumbAddrVir >= pVencStream->mpPack[0].mpAddr0 && \
              pThumbBuf->ThumbAddrVir < pVencStream->mpPack[0].mpAddr0+pVencStream->mpPack[0].mLen0)
          {
              *pThumbOffset = pThumbBuf->ThumbAddrVir - pVencStream->mpPack[0].mpAddr0;
          }
          else if (pThumbBuf->ThumbAddrVir >= pVencStream->mpPack[0].mpAddr1 && \
              pThumbBuf->ThumbAddrVir < pVencStream->mpPack[0].mpAddr1+pVencStream->mpPack[0].mLen1)
          {
              *pThumbOffset = pThumbBuf->ThumbAddrVir - pVencStream->mpPack[0].mpAddr1;
          }
      
          alogd("get thumb offet[%lld]", *pThumbOffset);
      
          return 0;
      }
      

      视频生成缩略图

      视频生成缩略图的方法是通过demux组件解析一帧图像,送入解码器,将其解码为YUV图像,再将其送入编码器缩放编码为较小的图像作为视频的缩略图。

      demux -> vdec -> venc -> jpeg
      

      详细的实现流程可以参考 softwinner/eyesee-mpp/framework/v316/demo/sample_ThumbRetriever下的sample_ThumbRetriever和eyesee-mpp/framework/v316/media/thumbretriever路径下的EyeseeThumbRetriever类的实现流程。

      1 条回复 最后回复 回复 引用 分享 2
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • 1 / 1
      • First post
        Last post

      Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

      行为准则 | 用户协议 | 隐私权政策