6/17/2011 9:22:03 AM

第二次编码就会出错

首先将数据考入到编码器缓存中

使用的一个IppPicture

IppBitstream 编码后的数据

struct  vrec_encoder_data_h264
{
    void *pEncoderState;
    H264EncoderCBTable   *pCBTable;
    H264NALUnitList *pNALUList;
    IppPicture *pPic; /* User Interface to the working buffer */
    H264EncoderParSet  *pParSet;
    IppBitstream  *pBufOut; // Output buffer
}
vrec_h264_encoder_private;
怎么对上面的结构体进行设置的?

pH264EncoderState
编码状态

InitCallbackTable_H264
初始化回调函数表

获取到的这个YUV数据结构体
struct av_frame
{
 sem_t  f_lock;
 void * frame;
 ts_t   ts;
 size_t size;
};

采集线程存放的YUV数据和编码取的线程是否一致?

这个buffer释放的有没有问题?

写都没问题,读也应该没有问题

怎么考的数据源?

编码的输入源还是这样一个结构体

/* Used for YCrCb data, it is stored in three areas */
struct v_frame
{
 int index;
 int height;
 int width;
 void *  start[3];  //yuv data
 size_t  length[3];
};


struct av_frame
{
 sem_t  f_lock;
 void * frame;
 ts_t   ts;
 size_t size;
};

注意这样一个结构体

#define AVFRM_OBJ_NEW(prt) (((AV_FRAME *)(prt))->frame = ((prt) + sizeof(AV_FRAME)), /
          ((AV_FRAME *)(prt)))

#define VFRM_OBJ_NEW(p, w, h) (((V_FRAME *)(p))->start[0]  = ((p) + sizeof(V_FRAME)), /
          ((V_FRAME *)(p))->length[0] = (w)*(h), /
          ((V_FRAME *)(p))->start[1]  = ((V_FRAME *)(p))->start[0] + (BLKZ((w)*(h), 4096) * 4096), /
          ((V_FRAME *)(p))->length[1] = (w)*(h) / 4, /
          ((V_FRAME *)(p))->start[2]  = ((V_FRAME *)(p))->start[1] + (BLKZ((w)*(h)/4, 4096) * 4096), /
          ((V_FRAME *)(p))->length[2] = (w)*(h) / 4, /
             ((V_FRAME *)(p)))
            
结构体的处理手法

注意到这些buffer的大小 0x70000

跟输入buffer没有关系

测试跟输出buffer有关系没?


IppBitstream

#define STRM_OBJ_NEW(prt) (((IppBitstream *)(prt))->pBsBuffer = ((prt) + sizeof(IppBitstream)), /
         ((IppBitstream *)(prt))->pBsCurByte = ((IppBitstream *)(prt))->pBsBuffer, /
         ((IppBitstream *)(prt))->bsByteLen = 0, /
         ((IppBitstream *)(prt))->bsCurBitOffset = 0, /
         ((IppBitstream *)(prt)))
        
对这个进行初试化

输出buffer实际上就是一个内部复用buffer


    IppBitstream  *pbufInfo = encoder_data->pBufOut;
   
    初试化的时候创建自己的内部复用buffer
   
    pbufInfo->pBsBuffer = (Ipp8u*)malloc(pbufInfo->bsByteLen
   
    vrec_h264_encoder_close
   
    关闭有没有问题 ?

camrec_video_preview   

目前只是简单的采集视频 自己进行采集的打开和关闭

camrec_video_cap

这个自成一体,自己采集编码  自己打开关闭

没有预览就再编码

高质量模式编码器不能重复使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值