Navigation

    全志在线开发者论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • 在线文档
    • 社区主页

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

    其它全志芯片讨论区
    v853 v851 v831 faq 技术支持
    1
    1
    364
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • q1215200171
      budbool LV 8 last edited by

      适用范围

      只适用于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 Reply Last reply Reply Quote Share 0
      • 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 © 2022 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

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