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

Commit bc8f53b8 authored by Dongwon Kang's avatar Dongwon Kang
Browse files

Revert "Revert "Move MediaBufferXXX from foundation to libmediaextractor""

This reverts commit 95a8bfab98a73a75eb60ecf2cc8683f4a1f04b35.
Plus, keeps 'virtual' keyword for ~MediaBuffer which has a child class.

Test: cts-tradefed run cts-dev --module CtsMediaTestCases --compatibility:module-arg
CtsMediaTestCases:include-annotation:android.platform.test.annotations.RequiresDevice
Bug: 67908542
Change-Id: Ib94d574d6bbd6245c174dd1c9bcca379015724cc
parent de9a7b5c
Loading
Loading
Loading
Loading
+1 −17
Original line number Diff line number Diff line
@@ -21,15 +21,13 @@
#include <media/MediaCodecBuffer.h>
#include <media/stagefright/foundation/ABuffer.h>
#include <media/stagefright/foundation/AMessage.h>
#include <media/stagefright/foundation/MediaBufferBase.h>

namespace android {

MediaCodecBuffer::MediaCodecBuffer(const sp<AMessage> &format, const sp<ABuffer> &buffer)
    : mMeta(new AMessage),
      mFormat(format),
      mBuffer(buffer),
      mMediaBufferBase(nullptr) {
      mBuffer(buffer) {
}

// ABuffer-like interface
@@ -58,20 +56,6 @@ status_t MediaCodecBuffer::setRange(size_t offset, size_t size) {
    return OK;
}

MediaBufferBase *MediaCodecBuffer::getMediaBufferBase() {
    if (mMediaBufferBase != NULL) {
        mMediaBufferBase->add_ref();
    }
    return mMediaBufferBase;
}

void MediaCodecBuffer::setMediaBufferBase(MediaBufferBase *mediaBuffer) {
    if (mMediaBufferBase != NULL) {
        mMediaBufferBase->release();
    }
    mMediaBufferBase = mediaBuffer;
}

sp<AMessage> MediaCodecBuffer::meta() {
    return mMeta;
}
+48 −0
Original line number Diff line number Diff line
/*
 * Copyright 2014 The Android Open Source Project
 * Copyright 2018, The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
@@ -14,27 +14,35 @@
 * limitations under the License.
 */

#ifndef MEDIA_BUFFER_BASE_H_
#ifndef MEDIA_BUFFER_HOLDER_H_

#define MEDIA_BUFFER_BASE_H_
#define MEDIA_BUFFER_HOLDER_H_

#include <media/stagefright/MediaBuffer.h>
#include <utils/RefBase.h>

namespace android {

class MediaBufferBase {
public:
    MediaBufferBase() {}
struct MediaBufferHolder : public RefBase {
    MediaBufferHolder(MediaBuffer* buffer)
        : mMediaBuffer(buffer) {
        if (mMediaBuffer != nullptr) {
            mMediaBuffer->add_ref();
        }
    }

    virtual void release() = 0;
    virtual void add_ref() = 0;
    virtual ~MediaBufferHolder() {
        if (mMediaBuffer != nullptr) {
            mMediaBuffer->release();
        }
    }

protected:
    virtual ~MediaBufferBase() {}
    MediaBuffer* mediaBuffer() { return mMediaBuffer; }

private:
    MediaBufferBase(const MediaBufferBase &);
    MediaBufferBase &operator=(const MediaBufferBase &);
    MediaBuffer* const mMediaBuffer;
};

}  // namespace android
}  // android

#endif  // MEDIA_BUFFER_BASE_H_
#endif  // MEDIA_BUFFER_HOLDER_H_
+0 −4
Original line number Diff line number Diff line
@@ -50,9 +50,6 @@ public:
    size_t offset() const;
    // Default implementation calls ABuffer::setRange() and returns OK.
    virtual status_t setRange(size_t offset, size_t size);
    // TODO: These can be removed if we finish replacing all MediaBuffer's.
    MediaBufferBase *getMediaBufferBase();
    void setMediaBufferBase(MediaBufferBase *mediaBuffer);

    // TODO: Specify each field for meta/format.
    sp<AMessage> meta();
@@ -66,7 +63,6 @@ private:
    const sp<AMessage> mMeta;
    sp<AMessage> mFormat;
    const sp<ABuffer> mBuffer;
    MediaBufferBase *mMediaBufferBase;
};

}  // namespace android
+2 −2
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@
#include <binder/IServiceManager.h>
#include <cutils/properties.h>
#include <media/DataSource.h>
#include <media/MediaBufferHolder.h>
#include <media/IMediaExtractorService.h>
#include <media/MediaHTTPService.h>
#include <media/MediaExtractor.h>
@@ -1167,8 +1168,7 @@ sp<ABuffer> NuPlayer2::GenericSource::mediaBufferToABuffer(

        // data is already provided in the buffer
        ab = new ABuffer(NULL, mb->range_length());
        mb->add_ref();
        ab->setMediaBufferBase(mb);
        ab->meta()->setObject("mediaBufferHolder", new MediaBufferHolder(mb));

        // Modular DRM: Required b/c of the above add_ref.
        // If ref>0, there must be an observer, or it'll crash at release().
+6 −4
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@
#include "NuPlayer2Source.h"

#include <cutils/properties.h>
#include <media/MediaBufferHolder.h>
#include <media/MediaCodecBuffer.h>
#include <media/NdkMediaCodec.h>
#include <media/NdkWrapper.h>
@@ -1081,16 +1082,17 @@ bool NuPlayer2::Decoder::onInputBufferFetched(const sp<AMessage> &msg) {
                memcpy(codecBuffer->data(), buffer->data(), buffer->size());
            } else { // No buffer->data()
                //Modular DRM
                mediaBuf = (MediaBuffer*)buffer->getMediaBufferBase();
                sp<RefBase> holder;
                if (buffer->meta()->findObject("mediaBufferHolder", &holder)) {
                    mediaBuf = (holder != nullptr) ?
                        static_cast<MediaBufferHolder*>(holder.get())->mediaBuffer() : nullptr;
                }
                if (mediaBuf != NULL) {
                    codecBuffer->setRange(0, mediaBuf->size());
                    memcpy(codecBuffer->data(), mediaBuf->data(), mediaBuf->size());

                    sp<MetaData> meta_data = mediaBuf->meta_data();
                    cryptInfo = AMediaCodecCryptoInfoWrapper::Create(meta_data);

                    // since getMediaBuffer() has incremented the refCount
                    mediaBuf->release();
                } else { // No mediaBuf
                    ALOGE("onInputBufferFetched: buffer->data()/mediaBuf are NULL for %p",
                            buffer.get());
Loading