Loading include/media/stagefright/MediaCodecSource.h +3 −0 Original line number Diff line number Diff line Loading @@ -108,6 +108,9 @@ private: bool mStarted; bool mStopping; bool mDoMoreWorkPending; bool mSetEncoderFormat; int mEncoderFormat; int mEncoderDataSpace; sp<AMessage> mEncoderActivityNotify; sp<IGraphicBufferProducer> mGraphicBufferProducer; sp<IGraphicBufferConsumer> mGraphicBufferConsumer; Loading include/media/stagefright/MetaData.h +3 −1 Original line number Diff line number Diff line Loading @@ -70,7 +70,9 @@ enum { kKeyDriftTime = 'dftT', // int64_t (usecs) kKeyAnchorTime = 'ancT', // int64_t (usecs) kKeyDuration = 'dura', // int64_t (usecs) kKeyColorFormat = 'colf', kKeyPixelFormat = 'pixf', // int32_t kKeyColorFormat = 'colf', // int32_t kKeyColorSpace = 'cols', // int32_t kKeyPlatformPrivate = 'priv', // pointer kKeyDecoderComponent = 'decC', // cstring kKeyBufferID = 'bfID', Loading media/libstagefright/ACodec.cpp +16 −0 Original line number Diff line number Diff line Loading @@ -1639,6 +1639,14 @@ status_t ACodec::configureCodec( if (mInputMetadataType == kMetadataBufferTypeGrallocSource) { mInputMetadataType = kMetadataBufferTypeCameraSource; } uint32_t usageBits; if (mOMX->getParameter( mNode, (OMX_INDEXTYPE)OMX_IndexParamConsumerUsageBits, &usageBits, sizeof(usageBits)) == OK) { inputFormat->setInt32( "using-sw-read-often", !!(usageBits & GRALLOC_USAGE_SW_READ_OFTEN)); } } int32_t prependSPSPPS = 0; Loading Loading @@ -5748,6 +5756,14 @@ status_t ACodec::LoadedState::setupInputSurface() { } } uint32_t usageBits; if (mCodec->mOMX->getParameter( mCodec->mNode, (OMX_INDEXTYPE)OMX_IndexParamConsumerUsageBits, &usageBits, sizeof(usageBits)) == OK) { mCodec->mInputFormat->setInt32( "using-sw-read-often", !!(usageBits & GRALLOC_USAGE_SW_READ_OFTEN)); } return OK; } Loading media/libstagefright/CameraSource.cpp +7 −3 Original line number Diff line number Diff line Loading @@ -670,9 +670,13 @@ status_t CameraSource::start(MetaData *meta) { mNumInputBuffers = nBuffers; } // TODO: Read in format/dataspace from somewhere // Uncomment to test SW encoders until TODO is resolved // mEncoderFormat = HAL_PIXEL_FORMAT_YCbCr_420_888; // apply encoder color format if specified if (meta->findInt32(kKeyPixelFormat, &mEncoderFormat)) { ALOGV("Using encoder format: %#x", mEncoderFormat); } if (meta->findInt32(kKeyColorSpace, &mEncoderDataSpace)) { ALOGV("Using encoder data space: %#x", mEncoderDataSpace); } } status_t err; Loading media/libstagefright/MediaCodecSource.cpp +28 −1 Original line number Diff line number Diff line Loading @@ -39,6 +39,9 @@ namespace android { const int kDefaultSwVideoEncoderFormat = HAL_PIXEL_FORMAT_YCbCr_420_888; const int kDefaultSwVideoEncoderDataSpace = HAL_DATASPACE_BT709; struct MediaCodecSource::Puller : public AHandler { Puller(const sp<MediaSource> &source); Loading Loading @@ -341,6 +344,9 @@ MediaCodecSource::MediaCodecSource( mStarted(false), mStopping(false), mDoMoreWorkPending(false), mSetEncoderFormat(false), mEncoderFormat(0), mEncoderDataSpace(0), mGraphicBufferConsumer(consumer), mFirstSampleTimeUs(-1ll), mEncoderReachedEOS(false), Loading Loading @@ -438,6 +444,18 @@ status_t MediaCodecSource::initEncoder() { } } sp<AMessage> inputFormat; int32_t usingSwReadOften; mSetEncoderFormat = false; if (mEncoder->getInputFormat(&inputFormat) == OK && inputFormat->findInt32("using-sw-read-often", &usingSwReadOften) && usingSwReadOften) { // this is a SW encoder; signal source to allocate SW readable buffers mSetEncoderFormat = true; mEncoderFormat = kDefaultSwVideoEncoderFormat; mEncoderDataSpace = kDefaultSwVideoEncoderDataSpace; } err = mEncoder->start(); if (err != OK) { Loading Loading @@ -632,8 +650,17 @@ status_t MediaCodecSource::onStart(MetaData *params) { resume(startTimeUs); } else { CHECK(mPuller != NULL); sp<MetaData> meta = params; if (mSetEncoderFormat) { if (meta == NULL) { meta = new MetaData; } meta->setInt32(kKeyPixelFormat, mEncoderFormat); meta->setInt32(kKeyColorSpace, mEncoderDataSpace); } sp<AMessage> notify = new AMessage(kWhatPullerNotify, mReflector); err = mPuller->start(params, notify); err = mPuller->start(meta.get(), notify); if (err != OK) { return err; } Loading Loading
include/media/stagefright/MediaCodecSource.h +3 −0 Original line number Diff line number Diff line Loading @@ -108,6 +108,9 @@ private: bool mStarted; bool mStopping; bool mDoMoreWorkPending; bool mSetEncoderFormat; int mEncoderFormat; int mEncoderDataSpace; sp<AMessage> mEncoderActivityNotify; sp<IGraphicBufferProducer> mGraphicBufferProducer; sp<IGraphicBufferConsumer> mGraphicBufferConsumer; Loading
include/media/stagefright/MetaData.h +3 −1 Original line number Diff line number Diff line Loading @@ -70,7 +70,9 @@ enum { kKeyDriftTime = 'dftT', // int64_t (usecs) kKeyAnchorTime = 'ancT', // int64_t (usecs) kKeyDuration = 'dura', // int64_t (usecs) kKeyColorFormat = 'colf', kKeyPixelFormat = 'pixf', // int32_t kKeyColorFormat = 'colf', // int32_t kKeyColorSpace = 'cols', // int32_t kKeyPlatformPrivate = 'priv', // pointer kKeyDecoderComponent = 'decC', // cstring kKeyBufferID = 'bfID', Loading
media/libstagefright/ACodec.cpp +16 −0 Original line number Diff line number Diff line Loading @@ -1639,6 +1639,14 @@ status_t ACodec::configureCodec( if (mInputMetadataType == kMetadataBufferTypeGrallocSource) { mInputMetadataType = kMetadataBufferTypeCameraSource; } uint32_t usageBits; if (mOMX->getParameter( mNode, (OMX_INDEXTYPE)OMX_IndexParamConsumerUsageBits, &usageBits, sizeof(usageBits)) == OK) { inputFormat->setInt32( "using-sw-read-often", !!(usageBits & GRALLOC_USAGE_SW_READ_OFTEN)); } } int32_t prependSPSPPS = 0; Loading Loading @@ -5748,6 +5756,14 @@ status_t ACodec::LoadedState::setupInputSurface() { } } uint32_t usageBits; if (mCodec->mOMX->getParameter( mCodec->mNode, (OMX_INDEXTYPE)OMX_IndexParamConsumerUsageBits, &usageBits, sizeof(usageBits)) == OK) { mCodec->mInputFormat->setInt32( "using-sw-read-often", !!(usageBits & GRALLOC_USAGE_SW_READ_OFTEN)); } return OK; } Loading
media/libstagefright/CameraSource.cpp +7 −3 Original line number Diff line number Diff line Loading @@ -670,9 +670,13 @@ status_t CameraSource::start(MetaData *meta) { mNumInputBuffers = nBuffers; } // TODO: Read in format/dataspace from somewhere // Uncomment to test SW encoders until TODO is resolved // mEncoderFormat = HAL_PIXEL_FORMAT_YCbCr_420_888; // apply encoder color format if specified if (meta->findInt32(kKeyPixelFormat, &mEncoderFormat)) { ALOGV("Using encoder format: %#x", mEncoderFormat); } if (meta->findInt32(kKeyColorSpace, &mEncoderDataSpace)) { ALOGV("Using encoder data space: %#x", mEncoderDataSpace); } } status_t err; Loading
media/libstagefright/MediaCodecSource.cpp +28 −1 Original line number Diff line number Diff line Loading @@ -39,6 +39,9 @@ namespace android { const int kDefaultSwVideoEncoderFormat = HAL_PIXEL_FORMAT_YCbCr_420_888; const int kDefaultSwVideoEncoderDataSpace = HAL_DATASPACE_BT709; struct MediaCodecSource::Puller : public AHandler { Puller(const sp<MediaSource> &source); Loading Loading @@ -341,6 +344,9 @@ MediaCodecSource::MediaCodecSource( mStarted(false), mStopping(false), mDoMoreWorkPending(false), mSetEncoderFormat(false), mEncoderFormat(0), mEncoderDataSpace(0), mGraphicBufferConsumer(consumer), mFirstSampleTimeUs(-1ll), mEncoderReachedEOS(false), Loading Loading @@ -438,6 +444,18 @@ status_t MediaCodecSource::initEncoder() { } } sp<AMessage> inputFormat; int32_t usingSwReadOften; mSetEncoderFormat = false; if (mEncoder->getInputFormat(&inputFormat) == OK && inputFormat->findInt32("using-sw-read-often", &usingSwReadOften) && usingSwReadOften) { // this is a SW encoder; signal source to allocate SW readable buffers mSetEncoderFormat = true; mEncoderFormat = kDefaultSwVideoEncoderFormat; mEncoderDataSpace = kDefaultSwVideoEncoderDataSpace; } err = mEncoder->start(); if (err != OK) { Loading Loading @@ -632,8 +650,17 @@ status_t MediaCodecSource::onStart(MetaData *params) { resume(startTimeUs); } else { CHECK(mPuller != NULL); sp<MetaData> meta = params; if (mSetEncoderFormat) { if (meta == NULL) { meta = new MetaData; } meta->setInt32(kKeyPixelFormat, mEncoderFormat); meta->setInt32(kKeyColorSpace, mEncoderDataSpace); } sp<AMessage> notify = new AMessage(kWhatPullerNotify, mReflector); err = mPuller->start(params, notify); err = mPuller->start(meta.get(), notify); if (err != OK) { return err; } Loading