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

Commit 3090025b authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

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

parents c83a23a7 bc8f53b8
Loading
Loading
Loading
Loading
+1 −17
Original line number Original line Diff line number Diff line
@@ -21,15 +21,13 @@
#include <media/MediaCodecBuffer.h>
#include <media/MediaCodecBuffer.h>
#include <media/stagefright/foundation/ABuffer.h>
#include <media/stagefright/foundation/ABuffer.h>
#include <media/stagefright/foundation/AMessage.h>
#include <media/stagefright/foundation/AMessage.h>
#include <media/stagefright/foundation/MediaBufferBase.h>


namespace android {
namespace android {


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


// ABuffer-like interface
// ABuffer-like interface
@@ -58,20 +56,6 @@ status_t MediaCodecBuffer::setRange(size_t offset, size_t size) {
    return OK;
    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() {
sp<AMessage> MediaCodecBuffer::meta() {
    return mMeta;
    return mMeta;
}
}
+48 −0
Original line number Original line 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");
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * you may not use this file except in compliance with the License.
@@ -14,27 +14,35 @@
 * limitations under the License.
 * 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 {
namespace android {


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


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


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


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


}  // namespace android
}  // android


#endif  // MEDIA_BUFFER_BASE_H_
#endif  // MEDIA_BUFFER_HOLDER_H_
+0 −4
Original line number Original line Diff line number Diff line
@@ -50,9 +50,6 @@ public:
    size_t offset() const;
    size_t offset() const;
    // Default implementation calls ABuffer::setRange() and returns OK.
    // Default implementation calls ABuffer::setRange() and returns OK.
    virtual status_t setRange(size_t offset, size_t size);
    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.
    // TODO: Specify each field for meta/format.
    sp<AMessage> meta();
    sp<AMessage> meta();
@@ -66,7 +63,6 @@ private:
    const sp<AMessage> mMeta;
    const sp<AMessage> mMeta;
    sp<AMessage> mFormat;
    sp<AMessage> mFormat;
    const sp<ABuffer> mBuffer;
    const sp<ABuffer> mBuffer;
    MediaBufferBase *mMediaBufferBase;
};
};


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


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


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


#include <cutils/properties.h>
#include <cutils/properties.h>
#include <media/MediaBufferHolder.h>
#include <media/MediaCodecBuffer.h>
#include <media/MediaCodecBuffer.h>
#include <media/NdkMediaCodec.h>
#include <media/NdkMediaCodec.h>
#include <media/NdkWrapper.h>
#include <media/NdkWrapper.h>
@@ -1081,16 +1082,17 @@ bool NuPlayer2::Decoder::onInputBufferFetched(const sp<AMessage> &msg) {
                memcpy(codecBuffer->data(), buffer->data(), buffer->size());
                memcpy(codecBuffer->data(), buffer->data(), buffer->size());
            } else { // No buffer->data()
            } else { // No buffer->data()
                //Modular DRM
                //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) {
                if (mediaBuf != NULL) {
                    codecBuffer->setRange(0, mediaBuf->size());
                    codecBuffer->setRange(0, mediaBuf->size());
                    memcpy(codecBuffer->data(), mediaBuf->data(), mediaBuf->size());
                    memcpy(codecBuffer->data(), mediaBuf->data(), mediaBuf->size());


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

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