导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页
    1. 主页
    2. leohe
    L
    • 资料
    • 关注 0
    • 粉丝 0
    • 我的积分 103
    • 主题 1
    • 帖子 2
    • 最佳 0
    • 群组 0

    leoheLV 2

    @leohe

    103
    积分
    0
    声望
    1
    资料浏览
    2
    帖子
    0
    粉丝
    0
    关注
    注册时间 最后登录

    leohe 取消关注 关注

    leohe 发布的最新帖子

    • 回复: T5编码H264接口报错

      问题

      能够提供一个H264 新接口的编码DEMO ?

      发布在 其它全志芯片讨论区
      L
      leohe
    • T5编码H264接口报错

      背景

      #旧接口--可正常使用
      DPRCT_W virtual int encode(const void* inputBuf, unsigned int inputLen,
                                     void* outputBuf, unsigned int outputLen) = 0;
      
      # 新接口
      virtual int encode(AVPacket* inPacket) = 0;
      

      使用上述接口编码NV12->H264. 可以正常工作. 但根据官方提示, 该接口已废弃. 推荐使用新的接口

      新接口问题描述

      // init part
      
       if (!m_avPacket )
          {
              m_avPacket = (AVPacket*)calloc(1,sizeof(AVPacket));
              if (!m_avPacket->pAddrVir0)
              {
                  int32_t frameSize = encode_param_.srcW * encode_param_.srcH *1.5;
                  m_avPacket->pAddrVir0 = (unsigned char* )calloc(frameSize, sizeof(int8_t));
                  m_avPacket->pAddrVir1 = m_avPacket->pAddrVir0+ encode_param_.srcW * encode_param_.srcH;
              }    
          }
      
       p_encoder_ = AWVideoEncoder::create();
        p_encoder_->init(&encode_param_,this);
      
      
      int32_t Encoder::EncodeFrame(int8_t *buff, uint32_t buffSize, int64_t pts, int32_t format)
      {
      
          if (buff == NULL || !m_avPacket)
          {
          	PLOGE.printf("raw image data is null and return!\n");
          	return -1;
          }
          static int64_t frameIndex  =0;
          m_avPacket->id = frameIndex ++;
          m_avPacket->pts = pts;
          int32_t frameUint = encode_param_.srcW * encode_param_.srcH ;
          m_avPacket->dataLen0  = frameUint;
          m_avPacket->dataLen1  = frameUint/2;
          memcpy(m_avPacket->pAddrVir0 ,  buff,frameUint*1.5);
          // memcpy(m_avPacket->pAddrVir1 ,  buff+frameUint,frameUint/2);
          int32_t ret =  p_encoder_->encode(m_avPacket);
          LOGI("encode input    pts:%d , index:%d result:%d", buffSize, pts, m_avPacket->id,ret);
          
      }
      

      替换使用新的接口, 编码第二帧数据的时候, 编码器内部一直提示一下错误

      ERROR  : cedarc <ReturnOneAllocateInputBuffer:424>: this buffer isn't allocate buffer,can't return
      ERROR  : cedarc <ReturnOneAllocInputBuffer:390>: ReturnOneAllocInputBuffer failed
      

      根据提示信息大意为未分配内存. 但实际输入的avpacket已经正常分配内存. 这个问题是SDKbug? 还是外部接口调用需要修改?

      发布在 其它全志芯片讨论区
      L
      leohe