当前位置: 首页 > news >正文

Android 13 - Media框架(22)- MediaCodec(三)

这一节开始我们将重新回到 MediaCodec 这一层来学习 buffer 的流转

status_t MediaCodec::dequeueOutputBuffer(size_t *index,size_t *offset,size_t *size,int64_t *presentationTimeUs,uint32_t *flags,int64_t timeoutUs) {sp<AMessage> msg = new AMessage(kWhatDequeueOutputBuffer, this);msg->setInt64("timeoutUs", timeoutUs);sp<AMessage> response;status_t err;if ((err = PostAndAwaitResponse(msg, &response)) != OK) {return err;}CHECK(response->findSize("index", index));CHECK(response->findSize("offset", offset));CHECK(response->findSize("size", size));CHECK(response->findInt64("timeUs", presentationTimeUs));CHECK(response->findInt32("flags", (int32_t *)flags));return OK;
}status_t MediaCodec::renderOutputBufferAndRelease(size_t index) {sp<AMessage> msg = new AMessage(kWhatReleaseOutputBuffer, this);msg->setSize("index", index);msg->setInt32("render", true);sp<AMessage> response;return PostAndAwaitResponse(msg, &response);
}status_t MediaCodec::renderOutputBufferAndRelease(size_t index, int64_t timestampNs) {sp<AMessage> msg = new AMessage(kWhatReleaseOutputBuffer, this);msg->setSize("index", index);msg->setInt32("render", true);msg->setInt64("timestampNs", timestampNs);sp<AMessage> response;return PostAndAwaitResponse(msg, &response);
}status_t MediaCodec::releaseOutputBuffer(size_t index) {sp<AMessage> msg = new AMessage(kWhatReleaseOutputBuffer, this);msg->setSize("index", index);sp<AMessage> response;return PostAndAwaitResponse(msg, &response);
}status_t MediaCodec::signalEndOfInputStream() {sp<AMessage> msg = new AMessage(kWhatSignalEndOfInputStream, this);sp<AMessage> response;return PostAndAwaitResponse(msg, &response);
}status_t MediaCodec::getOutputFormat(sp<AMessage> *format) const {sp<AMessage> msg = new AMessage(kWhatGetOutputFormat, this);sp<AMessage> response;status_t err;if ((err = PostAndAwaitResponse(msg, &response)) != OK) {return err;}CHECK(response->findMessage("format", format));return OK;
}
http://www.lryc.cn/news/257092.html

相关文章:

  • git提交报错 fatal: LF would be replaced by CRLF in package-lock.json
  • 卷积详解和并行卷积
  • c#生成二维码二维码中间添加定制LoGo
  • 设计CPU功能的数字电路
  • 在windows下编译libiconv库
  • html,css,开发知识,调试知识
  • Vulnerability: File Upload(Medium)--MYSQL注入
  • 短视频账号剪辑矩阵+无人直播系统源头开发
  • Python traceback模块:获取异常信息
  • 单点登录方案调研与实现
  • HarmonyOS应用开发者基础认证考试(稳过)
  • 日常开发日志
  • 【FMCW毫米波雷达设计 】 — FMCW波形
  • 力扣labuladong一刷day35天
  • Matlab 曲线动态绘制
  • Spark DataFrame和Dataset使用例子
  • CSS彩色发光液体玻璃
  • OpenGLES:glReadPixels()获取相机GLSurfaceView预览数据并保存
  • 小红书蒲公英平台开通后,有哪些注意的地方,以及如何进行报价?
  • 持续集成交付CICD:Jenkins配置Nexus制品上传流水线
  • C语言笔试例题_指针专练30题(附答案解析)
  • 【Vue+Python】—— 基于Vue与Python的图书管理系统
  • 智能成绩表 - 华为OD统一考试(C卷)
  • 【基于ESP32无线蓝牙上传电脑Excel透传数据】
  • Qt篇——QChartView实现鼠标滚轮缩放、鼠标拖拽平移、鼠标双击重置缩放平移、曲线点击显示坐标
  • 掌握VUE中localStorage的使用
  • 所有行业的最终归宿-我有才打造知识付费平台
  • 图的深度和广度优先遍历
  • 计算机毕业设计JAVA+SSM+springboot养老院管理系统
  • Flutter路由的几种用法