diff options
author | Shalaj Jain <shalajj@codeaurora.org> | 2015-07-21 20:25:16 -0700 |
---|---|---|
committer | Satish Kamuju <skamuj@codeaurora.org> | 2015-10-06 17:32:39 +0530 |
commit | 68ec69bc44e7d362a3f88fec3459654b270f86cd (patch) | |
tree | ab69ac56e55022c8f098cd3d0843a1bd5f51ea72 /media/libstagefright | |
parent | 4d0485d7daead3a28cac12c2e2cea25c2ade654d (diff) | |
download | frameworks_av-68ec69bc44e7d362a3f88fec3459654b270f86cd.zip frameworks_av-68ec69bc44e7d362a3f88fec3459654b270f86cd.tar.gz frameworks_av-68ec69bc44e7d362a3f88fec3459654b270f86cd.tar.bz2 |
avextensions: Add support for Codec Extension features
Add support for Codec extension features like
skype, vqzip, b-frame encoding, prefer adaptive playback etc.
Add extensions to support encode batching.
Also enable Werror for libavextensions.
Change-Id: Ia342d4abe4bb1e21b9ff2b8213fb96421485a333
Diffstat (limited to 'media/libstagefright')
-rw-r--r-- | media/libstagefright/ACodec.cpp | 10 | ||||
-rw-r--r-- | media/libstagefright/CameraSource.cpp | 4 | ||||
-rw-r--r-- | media/libstagefright/MediaCodec.cpp | 3 | ||||
-rw-r--r-- | media/libstagefright/MediaCodecList.cpp | 8 | ||||
-rw-r--r-- | media/libstagefright/MediaCodecSource.cpp | 4 | ||||
-rw-r--r-- | media/libstagefright/StagefrightMetadataRetriever.cpp | 3 |
6 files changed, 31 insertions, 1 deletions
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp index bd3c17c..9af5f4b 100644 --- a/media/libstagefright/ACodec.cpp +++ b/media/libstagefright/ACodec.cpp @@ -3235,6 +3235,7 @@ status_t ACodec::setupMPEG4EncoderParameters(const sp<AMessage> &msg) { mpeg4type.eLevel = static_cast<OMX_VIDEO_MPEG4LEVELTYPE>(level); } + setBFrames(&mpeg4type); err = mOMX->setParameter( mNode, OMX_IndexParamVideoMpeg4, &mpeg4type, sizeof(mpeg4type)); @@ -3432,6 +3433,8 @@ status_t ACodec::setupAVCEncoderParameters(const sp<AMessage> &msg) { err = verifySupportForProfileAndLevel(profile, level); if (err != OK) { + ALOGE("%s does not support profile %x @ level %x", + mComponentName.c_str(), profile, level); return err; } @@ -3440,11 +3443,14 @@ status_t ACodec::setupAVCEncoderParameters(const sp<AMessage> &msg) { } // XXX + // Allow higher profiles to be set since the encoder seems to support +#if 0 if (h264type.eProfile != OMX_VIDEO_AVCProfileBaseline) { ALOGW("Use baseline profile instead of %d for AVC recording", h264type.eProfile); h264type.eProfile = OMX_VIDEO_AVCProfileBaseline; } +#endif if (h264type.eProfile == OMX_VIDEO_AVCProfileBaseline) { h264type.nSliceHeaderSpacing = 0; @@ -3465,6 +3471,7 @@ status_t ACodec::setupAVCEncoderParameters(const sp<AMessage> &msg) { h264type.nCabacInitIdc = 0; } + setBFrames(&h264type, iFrameInterval, frameRate); if (h264type.nBFrames != 0) { h264type.nAllowedPictureTypes |= OMX_VIDEO_PictureTypeB; } @@ -4456,6 +4463,8 @@ void ACodec::sendFormatChange(const sp<AMessage> &reply) { mEncoderPadding * frameSize); } + getVQZIPInfo(notify); + notify->post(); mSentFormat = true; @@ -5188,6 +5197,7 @@ bool ACodec::BaseState::onOMXFillBufferDone( mCodec->mSkipCutBuffer->submit(info->mData); } info->mData->meta()->setInt64("timeUs", timeUs); + info->mData->meta()->setObject("graphic-buffer", info->mGraphicBuffer); sp<AMessage> notify = mCodec->mNotify->dup(); notify->setInt32("what", CodecBase::kWhatDrainThisBuffer); diff --git a/media/libstagefright/CameraSource.cpp b/media/libstagefright/CameraSource.cpp index ed3d520..41513fb 100644 --- a/media/libstagefright/CameraSource.cpp +++ b/media/libstagefright/CameraSource.cpp @@ -33,6 +33,8 @@ #include <utils/String8.h> #include <cutils/properties.h> +#include <stagefright/AVExtensions.h> + #if LOG_NDEBUG #define UNUSED_UNLESS_VERBOSE(x) (void)(x) #else @@ -587,6 +589,8 @@ status_t CameraSource::initWithCameraAccess( mMeta->setInt32(kKeyStride, mVideoSize.width); mMeta->setInt32(kKeySliceHeight, mVideoSize.height); mMeta->setInt32(kKeyFrameRate, mVideoFrameRate); + AVUtils::get()->extractCustomCameraKeys(params, mMeta); + return OK; } diff --git a/media/libstagefright/MediaCodec.cpp b/media/libstagefright/MediaCodec.cpp index 4659d92..fca8b2c 100644 --- a/media/libstagefright/MediaCodec.cpp +++ b/media/libstagefright/MediaCodec.cpp @@ -984,6 +984,9 @@ bool MediaCodec::handleDequeueOutputBuffer(const sp<AReplyToken> &replyID, bool if (omxFlags & OMX_BUFFERFLAG_EOS) { flags |= BUFFER_FLAG_EOS; } + if (omxFlags & OMX_BUFFERFLAG_EXTRADATA) { + flags |= BUFFER_FLAG_EXTRADATA; + } response->setInt32("flags", flags); response->postReply(replyID); diff --git a/media/libstagefright/MediaCodecList.cpp b/media/libstagefright/MediaCodecList.cpp index 5edc04c..b1dd96f 100644 --- a/media/libstagefright/MediaCodecList.cpp +++ b/media/libstagefright/MediaCodecList.cpp @@ -939,7 +939,13 @@ status_t MediaCodecList::addLimit(const char **attrs) { // complexity: range + default bool found; - if (name == "aspect-ratio" || name == "bitrate" || name == "block-count" + // VT specific limits + if (name.find("vt-") == 0) { + AString value; + if (msg->findString("value", &value) && value.size()) { + mCurrentInfo->addDetail(name, value); + } + } else if (name == "aspect-ratio" || name == "bitrate" || name == "block-count" || name == "blocks-per-second" || name == "complexity" || name == "frame-rate" || name == "quality" || name == "size" || name == "measured-blocks-per-second" || name.startsWith("measured-frame-rate-")) { diff --git a/media/libstagefright/MediaCodecSource.cpp b/media/libstagefright/MediaCodecSource.cpp index 16a1931..b91660a 100644 --- a/media/libstagefright/MediaCodecSource.cpp +++ b/media/libstagefright/MediaCodecSource.cpp @@ -37,6 +37,7 @@ #include <media/stagefright/PersistentSurface.h> #include <media/stagefright/Utils.h> #include <OMX_Core.h> +#include <stagefright/AVExtensions.h> namespace android { @@ -576,6 +577,9 @@ status_t MediaCodecSource::feedEncoderInputBuffers() { // push decoding time for video, or drift time for audio if (mIsVideo) { mDecodingTimeQueue.push_back(timeUs); + if (mFlags & FLAG_USE_METADATA_INPUT) { + AVUtils::get()->addDecodingTimesFromBatch(mbuf, mDecodingTimeQueue); + } } else { #if DEBUG_DRIFT_TIME if (mFirstSampleTimeUs < 0ll) { diff --git a/media/libstagefright/StagefrightMetadataRetriever.cpp b/media/libstagefright/StagefrightMetadataRetriever.cpp index ccf4587..6c795ac 100644 --- a/media/libstagefright/StagefrightMetadataRetriever.cpp +++ b/media/libstagefright/StagefrightMetadataRetriever.cpp @@ -45,6 +45,8 @@ #include <CharacterEncodingDetector.h> +#include <stagefright/AVExtensions.h> + namespace android { static const int64_t kBufferTimeOutUs = 30000ll; // 30 msec @@ -104,6 +106,7 @@ status_t StagefrightMetadataRetriever::setDataSource( fd = dup(fd); ALOGV("setDataSource(%d, %" PRId64 ", %" PRId64 ")", fd, offset, length); + AVUtils::get()->printFileName(fd); clearMetadata(); mSource = new FileSource(fd, offset, length); |