千家信息网

codec编码传输流程是怎么样的

发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,codec编码传输流程是怎么样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。SurfaceMediaSource::r
千家信息网最后更新 2025年11月09日codec编码传输流程是怎么样的

codec编码传输流程是怎么样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

  1. SurfaceMediaSource::read()锁控制从IGraphicBufferConsumer处读取buffer,当graphic产生数据
    Overrun时等待

    while (mStarted && mNumPendingBuffers == mMaxAcquiredBufferCount) {

    mMediaBuffersAvailableCondition.wait(mMutex);

    }

  2. MediaPuller拿到该buffer后
    status_t err = mSource->read(&mbuf);

    notify->setInt32("what", kWhatAccessUnit);

    notify->setBuffer("accessUnit", accessUnit);

    notify->post();


  3. Converter 接收CHECK_EQ(what, MediaPuller::kWhatAccessUnit);

    mInputBufferQueue.push_back(accessUnit);

    feedEncoderInputBuffers();


  4. Converter::feedEncoderInputBuffers() 中拷贝buffer数据到codec的mEncoderInputBuffers
    通过这个while循环来等待拷贝

    while (!mInputBufferQueue.empty()&& !mAvailEncoderInputIndices.empty()){


    memcpy(mEncoderInputBuffers.itemAt(bufferIndex)->data(),

    buffer->data(),

    buffer->size());

status_t err = mEncoder->queueInputBuffer(

bufferIndex, 0, (buffer == NULL) ? 0 : buffer->size(),

timeUs, flags);

5. 上面流程传递的是主要是共享内存buffer_handle_t,当codec 完成ACodec::BaseState::onOMXEmptyBufferDone后

// We're in "store-metadata-in-buffers" mode, the underlying

// OMX component had access to data that's implicitly refcounted

// by this "MediaBuffer" object. Now that the OMX component has

// told us that it's done with the input buffer, we can decrement

// the mediaBuffer's reference count.

info->mData->setMediaBufferBase(NULL);

才通知SurfaceMediaSource::signalBufferReturned()让graphic consumer来真正释放

mConsumer->releaseBuffer();

Stack 信息

#06 pc 000f4583 /system/lib/libstagefright.so (android::SurfaceMediaSource::signalBufferReturned(android::MediaBuffer*)+38)

#07 pc 000f45a5 /system/lib/libstagefright.so (non-virtual thunk to android::SurfaceMediaSource::signalBufferReturned(android::MediaBuffer*)+4)

#08 pc 0000b011 /system/lib/libstagefright_foundation.so (android::ABuffer::setMediaBufferBase(android::MediaBufferBase*)+16)

#09 pc 0008adeb /system/lib/libstagefright.so (android::ACodec::BaseState::onOMXEmptyBufferDone(unsigned int, int)+78)

#10 pc 0008aab5 /system/lib/libstagefright.so (android::ACodec::BaseState::onOMXMessage(android::sp const&)+228)

#11 pc 0008a731 /system/lib/libstagefright.so (android::ACodec::BaseState::onMessageReceived(android::sp const&)+744)

#12 pc 0008e779 /system/lib/libstagefright.so (android::ACodec::ExecutingState::onMessageReceived(android::sp const&)+508)

#13 pc 0000b5a1 /system/lib/libstagefright_foundation.so (android::AHierarchicalStateMachine::handleMessage(android::sp const&)+64)

#14 pc 0008a917 /system/lib/libstagefright.so (android::ACodec::BaseState::onOMXMessageList(android::sp const&)+106)

#15 pc 0008a5e7 /system/lib/libstagefright.so (android::ACodec::BaseState::onMessageReceived(android::sp const&)+414)

#16 pc 0008e779 /system/lib/libstagefright.so (android::ACodec::ExecutingState::onMessageReceived(android::sp const&)+508)

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

流程 拷贝 数据 帮助 编码 传输 清楚 信息 内存 内容 对此 文章 新手 更多 知识 行业 资讯 资讯频道 难题 需求 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 服务器bmc有api接口吗 头歌数据库原理实训作业答案 幼儿园网络安全管理 江苏软件开发管理 医疗科技加互联网 mongodb数据库安全性 数据库中创建默认日期 网络安全攻防技术实战闵海钊 哪儿有重庆双线服务器托管服务器 浙江省网络安全学院干嘛用的 常宁金融网络安全知识 魔兽数据库是什么 中国人3d体型数据库 青少年网络安全观后感150 根据网络安全策略及服务器 网络安全需求分析实训报告 网络安全主题教育手抄报图片 数据库如何创建视图并显示字段名 网络安全生产红头文件 国外大型软件开发方法 重庆品质软件开发服务检测中心 sdk软件开发岗位 9400f能做服务器吗 航运网络安全典例 软件开发相关岗位职责 安徽专业软件开发怎么样 创建数据库备份的命令 mysql数据库查询输出 奇迹世界一键端数据库未连接 贵阳市网络安全知识在线答题活动
0