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

Commit 254d783c authored by Dongwon Kang's avatar Dongwon Kang Committed by Android (Google) Code Review
Browse files

Merge "Move MediaBufferXXX from foundation to libmediaextractor"

parents 9ae88bd5 f03606d9
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