C++内存操作

内存移动

首先从SDK读取一定字节到(camVideoBufs),然后把camVideoBufs读取到较大的中间缓冲区(Framed_databuf)直至中间buffer的长度达到或者刚超过最大(Fmaxsize)时,copy到fTo中。把超过的部分再放回到Framed_databuf的首部

void EasyCameraMediaSource::doGetNextFrame()
{
    //Framed_databuf --- 中转buffer   
    //curSize  ---- 中转buffer当前size
    //readbufsize   ---- 已经读取的buffersize
    //流程:从camVideoBufs中取出流后放循环到Framed_databuf,直至curSize>fMaxSize,
    //把fMaxSize大小的流放到fto里。剩余curSize - fMaxSize留下的尾巴再重新放到Framed_databuf头部,
    //再循环取流到Framed_databuf直至curSize>fMaxSize....

    curSize = bufsizel - readbufsize;

    if (curSize < fMaxSize)
    {
        memmove(Framed_databuf, Framed_databuf + readbufsize, curSize);
        memset(Framed_databuf + curSize, 0, readbufsize);
        readbufsize = 0;
        while (1)
        {
            //从缓冲区中获取一个H264数据帧
            unsigned int realLen = 0;
            int type, channel, fIndex = 0;
            //TODO:从缓冲区中获取数据
            unsigned char *tmp = Framed_databuf + curSize;
            int bufLen = buffers_get_data(tmp, &realLen, &((CLive555Pusher*)m_ps)->camVideoBufs, &type, &channel, &fIndex);
            if (bufLen>0)
            {
                curSize += bufLen;
                if (curSize >= fMaxSize)
                {
                    //printf("hello word hello word hello word assembleSize:%d fMaxSize:%d\n", assembleSize, fMaxSize);
                    break;
                }
            }
            else
            {
                fWatchVariable = 0;
                envir().taskScheduler().scheduleDelayedTask(10000, (TaskFunc*)sleep,this);
                envir().taskScheduler().doEventLoop(&fWatchVariable);
                continue;           
            }
        }
        bufsizel = curSize;
        fFrameSize = fMaxSize;
        memcpy(fTo, Framed_databuf, fFrameSize);
        readbufsize += fFrameSize;
    }else
    {
        fFrameSize = fMaxSize;
        memcpy(fTo, Framed_databuf + readbufsize, fFrameSize);
        readbufsize += fFrameSize;
    }

    return;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值