12860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim/*
22860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim * Copyright (C) 2018 The Android Open Source Project
32860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim *
42860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim * Licensed under the Apache License, Version 2.0 (the "License");
52860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim * you may not use this file except in compliance with the License.
62860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim * You may obtain a copy of the License at
72860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim *
82860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim *      http://www.apache.org/licenses/LICENSE-2.0
92860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim *
102860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim * Unless required by applicable law or agreed to in writing, software
112860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim * distributed under the License is distributed on an "AS IS" BASIS,
122860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim * See the License for the specific language governing permissions and
142860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim * limitations under the License.
152860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim */
162860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim
172860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim#include <inttypes.h>
182860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim
192860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim#define LOG_TAG "OmxGraphicBufferSource"
202860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim//#define LOG_NDEBUG 0
212860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim#include <utils/Log.h>
222860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim
2382832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim#include <media/stagefright/bqhelper/ComponentWrapper.h>
2482832ceb96670bf95013c7b42e22f32f58050131Wonsik Kim#include <media/stagefright/bqhelper/GraphicBufferSource.h>
252860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim#include <media/stagefright/omx/OmxGraphicBufferSource.h>
262860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim
272860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kimnamespace android {
282860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim
292860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kimnamespace {
302860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim
312860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kimclass OmxComponentWrapper : public ComponentWrapper {
322860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kimpublic:
332860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim    explicit OmxComponentWrapper(const sp<IOmxNodeWrapper> &node)
342860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim        : mOmxNode(node) {}
352860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim    virtual ~OmxComponentWrapper() = default;
362860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim
372860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim    status_t submitBuffer(
382860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim            int32_t bufferId, const sp<GraphicBuffer> &buffer,
392860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim            int64_t timestamp, int fenceFd) override {
402860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim        return mOmxNode->emptyBuffer(
412860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim                bufferId, OMX_BUFFERFLAG_ENDOFFRAME, buffer, timestamp, fenceFd);
422860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim    }
432860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim
442860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim    status_t submitEos(int32_t bufferId) override {
452860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim        return mOmxNode->emptyBuffer(bufferId, OMX_BUFFERFLAG_ENDOFFRAME | OMX_BUFFERFLAG_EOS);
462860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim    }
472860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim
482860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim    void dispatchDataSpaceChanged(
492860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim            int32_t dataSpace, int32_t aspects, int32_t pixelFormat) override {
502860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim        mOmxNode->dispatchDataSpaceChanged(dataSpace, aspects, pixelFormat);
512860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim    }
522860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim
532860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kimprivate:
542860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim    sp<IOmxNodeWrapper> mOmxNode;
552860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim
562860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim    DISALLOW_EVIL_CONSTRUCTORS(OmxComponentWrapper);
572860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim};
582860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim
592860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim}  // namespace
602860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim
612860573684ebaf514827cc1b5b144deb194eb8f6Wonsik KimStatus OmxGraphicBufferSource::onOmxExecuting() {
622860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim    return start();
632860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim}
642860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim
652860573684ebaf514827cc1b5b144deb194eb8f6Wonsik KimStatus OmxGraphicBufferSource::onOmxIdle() {
662860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim    return stop();
672860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim}
682860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim
692860573684ebaf514827cc1b5b144deb194eb8f6Wonsik KimStatus OmxGraphicBufferSource::onOmxLoaded(){
702860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim    return release();
712860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim}
722860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim
732860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kimstatus_t OmxGraphicBufferSource::configure(
742860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim        const sp<IOmxNodeWrapper>& omxNode,
752860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim        int32_t dataSpace,
762860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim        int32_t bufferCount,
772860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim        uint32_t frameWidth,
782860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim        uint32_t frameHeight,
792860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim        uint32_t consumerUsage) {
802860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim    if (omxNode == NULL) {
812860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim        return BAD_VALUE;
822860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim    }
832860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim
842860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim    return GraphicBufferSource::configure(
852860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim            new OmxComponentWrapper(omxNode), dataSpace, bufferCount,
862860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim            frameWidth, frameHeight, consumerUsage);
872860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim}
882860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim
892860573684ebaf514827cc1b5b144deb194eb8f6Wonsik Kim}  // namespace android
90