Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4273dd03 authored by Wonsik Kim's avatar Wonsik Kim
Browse files

MediaCodec refactoring part 1-a: buffers become separate class

MediaCodecBuffer is meant to replace ABuffer and MediaBuffer in
communication between framework components. As the first step, replace
use of ABuffer in MediaCodec with MediaCodecBuffer, and adjust related
classes accordingly.

MediaCodec.getBuffer() and related APIs now returns MediaCodecBuffers;
thus change MediaCodec clients to use MediaCodecBuffer accordingly.

Test: manually tested for key use cases (Camera, YouTube and Play Movies)
Change-Id: Iba7ce131645e75ce5ddbf497fb793ab38b7f245b
parent 2e0a36c4
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@
#include <gui/Surface.h>

#include <media/ICrypto.h>
#include <media/MediaCodecBuffer.h>
#include <media/stagefright/MediaCodec.h>
#include <media/stagefright/foundation/ABuffer.h>
#include <media/stagefright/foundation/ADebug.h>
@@ -407,7 +408,7 @@ status_t JMediaCodec::getOutputFormat(JNIEnv *env, size_t index, jobject *format

status_t JMediaCodec::getBuffers(
        JNIEnv *env, bool input, jobjectArray *bufArray) const {
    Vector<sp<ABuffer> > buffers;
    Vector<sp<MediaCodecBuffer> > buffers;

    status_t err =
        input
@@ -425,7 +426,7 @@ status_t JMediaCodec::getBuffers(
    }

    for (size_t i = 0; i < buffers.size(); ++i) {
        const sp<ABuffer> &buffer = buffers.itemAt(i);
        const sp<MediaCodecBuffer> &buffer = buffers.itemAt(i);

        jobject byteBuffer = NULL;
        err = createByteBufferFromABuffer(
@@ -446,8 +447,9 @@ status_t JMediaCodec::getBuffers(
}

// static
template <typename T>
status_t JMediaCodec::createByteBufferFromABuffer(
        JNIEnv *env, bool readOnly, bool clearBuffer, const sp<ABuffer> &buffer,
        JNIEnv *env, bool readOnly, bool clearBuffer, const sp<T> &buffer,
        jobject *buf) const {
    // if this is an ABuffer that doesn't actually hold any accessible memory,
    // use a null ByteBuffer
@@ -492,7 +494,7 @@ status_t JMediaCodec::createByteBufferFromABuffer(

status_t JMediaCodec::getBuffer(
        JNIEnv *env, bool input, size_t index, jobject *buf) const {
    sp<ABuffer> buffer;
    sp<MediaCodecBuffer> buffer;

    status_t err =
        input
@@ -509,7 +511,7 @@ status_t JMediaCodec::getBuffer(

status_t JMediaCodec::getImage(
        JNIEnv *env, bool input, size_t index, jobject *buf) const {
    sp<ABuffer> buffer;
    sp<MediaCodecBuffer> buffer;

    status_t err =
        input
+2 −1
Original line number Diff line number Diff line
@@ -146,8 +146,9 @@ private:

    status_t mInitStatus;

    template <typename T>
    status_t createByteBufferFromABuffer(
            JNIEnv *env, bool readOnly, bool clearBuffer, const sp<ABuffer> &buffer,
            JNIEnv *env, bool readOnly, bool clearBuffer, const sp<T> &buffer,
            jobject *buf) const;

    void cacheJavaObjects(JNIEnv *env);