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;
}

相关推荐

  1. Android 13 - Media框架22)- MediaCodec

    2023-12-16 00:06:06       39 阅读
  2. Android 13 - Media框架(30)- MediaCodec(五)

    2023-12-16 00:06:06       38 阅读
  3. Android 13 - Media框架21)- ACodec(

    2023-12-16 00:06:06       35 阅读
  4. Android 13 - Media框架21)- ACodec(

    2023-12-16 00:06:06       36 阅读
  5. Android 13 - Media框架22)- ACodecBufferChannel

    2023-12-16 00:06:06       25 阅读
  6. Android 13 - Media框架22)- ACodec(四)

    2023-12-16 00:06:06       86 阅读
  7. Android 13 - Media框架20)- ACodec(二)

    2023-12-16 00:06:06       31 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-16 00:06:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-16 00:06:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-16 00:06:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-16 00:06:06       20 阅读

热门阅读

  1. 【数据结构】——查找、散列表简答题模板

    2023-12-16 00:06:06       23 阅读
  2. JIS-CTF

    JIS-CTF

    2023-12-16 00:06:06      36 阅读
  3. LINQ简述

    2023-12-16 00:06:06       41 阅读
  4. 将0x06(16进制)转换为二进制

    2023-12-16 00:06:06       48 阅读
  5. 基于SpringBoot在线电子购物平台网的设计与实现

    2023-12-16 00:06:06       44 阅读
  6. 飞天使-docker知识点2-dockerfile构建镜像

    2023-12-16 00:06:06       36 阅读
  7. Python: any()函数

    2023-12-16 00:06:06       40 阅读
  8. RTC外设

    RTC外设

    2023-12-16 00:06:06      43 阅读