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