Loading media/libstagefright/ACodec.cpp +110 −29 Original line number Diff line number Diff line Loading @@ -293,6 +293,8 @@ protected: } } void setSurfaceParameters(const sp<AMessage> &msg); private: // Handles an OMX message. Returns true iff message was handled. bool onOMXMessage(const sp<AMessage> &msg); Loading Loading @@ -6502,6 +6504,59 @@ void ACodec::BaseState::getMoreInputDataIfPossible() { postFillThisBuffer(eligible); } void ACodec::BaseState::setSurfaceParameters(const sp<AMessage> &msg) { sp<AMessage> params; CHECK(msg->findMessage("params", ¶ms)); status_t err = mCodec->setSurfaceParameters(params); if (err != OK) { ALOGE("[%s] Unable to set input surface parameters (err %d)", mCodec->mComponentName.c_str(), err); return; } int64_t timeOffsetUs; if (params->findInt64(PARAMETER_KEY_OFFSET_TIME, &timeOffsetUs)) { params->removeEntryAt(params->findEntryByName(PARAMETER_KEY_OFFSET_TIME)); if (params->countEntries() == 0) { msg->removeEntryAt(msg->findEntryByName("params")); return; } } int64_t skipFramesBeforeUs; if (params->findInt64("skip-frames-before", &skipFramesBeforeUs)) { params->removeEntryAt(params->findEntryByName("skip-frames-before")); if (params->countEntries() == 0) { msg->removeEntryAt(msg->findEntryByName("params")); return; } } int32_t dropInputFrames; if (params->findInt32(PARAMETER_KEY_SUSPEND, &dropInputFrames)) { params->removeEntryAt(params->findEntryByName(PARAMETER_KEY_SUSPEND)); if (params->countEntries() == 0) { msg->removeEntryAt(msg->findEntryByName("params")); return; } } int64_t stopTimeUs; if (params->findInt64("stop-time-us", &stopTimeUs)) { params->removeEntryAt(params->findEntryByName("stop-time-us")); if (params->countEntries() == 0) { msg->removeEntryAt(msg->findEntryByName("params")); return; } } } bool ACodec::BaseState::onOMXFillBufferDone( IOMX::buffer_id bufferID, size_t rangeOffset, size_t rangeLength, Loading Loading @@ -7368,6 +7423,13 @@ status_t ACodec::LoadedToIdleState::allocateBuffers() { bool ACodec::LoadedToIdleState::onMessageReceived(const sp<AMessage> &msg) { switch (msg->what()) { case kWhatSetParameters: { BaseState::setSurfaceParameters(msg); if (msg->countEntries() > 0) { mCodec->deferMessage(msg); } return true; } case kWhatShutdown: { mCodec->deferMessage(msg); Loading Loading @@ -7444,6 +7506,13 @@ void ACodec::IdleToExecutingState::stateEntered() { bool ACodec::IdleToExecutingState::onMessageReceived(const sp<AMessage> &msg) { switch (msg->what()) { case kWhatSetParameters: { BaseState::setSurfaceParameters(msg); if (msg->countEntries() > 0) { mCodec->deferMessage(msg); } return true; } case kWhatShutdown: { mCodec->deferMessage(msg); Loading Loading @@ -7723,27 +7792,7 @@ bool ACodec::ExecutingState::onMessageReceived(const sp<AMessage> &msg) { return handled; } status_t ACodec::setParameters(const sp<AMessage> ¶ms) { int32_t videoBitrate; if (params->findInt32("video-bitrate", &videoBitrate)) { OMX_VIDEO_CONFIG_BITRATETYPE configParams; InitOMXParams(&configParams); configParams.nPortIndex = kPortIndexOutput; configParams.nEncodeBitrate = videoBitrate; status_t err = mOMXNode->setConfig( OMX_IndexConfigVideoBitrate, &configParams, sizeof(configParams)); if (err != OK) { ALOGE("setConfig(OMX_IndexConfigVideoBitrate, %d) failed w/ err %d", videoBitrate, err); return err; } } status_t ACodec::setSurfaceParameters(const sp<AMessage> ¶ms) { int64_t timeOffsetUs; if (params->findInt64(PARAMETER_KEY_OFFSET_TIME, &timeOffsetUs)) { if (mGraphicBufferSource == NULL) { Loading Loading @@ -7831,9 +7880,41 @@ status_t ACodec::setParameters(const sp<AMessage> ¶ms) { mInputFormat->setInt64("android._stop-time-offset-us", stopTimeOffsetUs); } return OK; } status_t ACodec::setParameters(const sp<AMessage> ¶ms) { status_t err; int32_t videoBitrate; if (params->findInt32("video-bitrate", &videoBitrate)) { OMX_VIDEO_CONFIG_BITRATETYPE configParams; InitOMXParams(&configParams); configParams.nPortIndex = kPortIndexOutput; configParams.nEncodeBitrate = videoBitrate; err = mOMXNode->setConfig( OMX_IndexConfigVideoBitrate, &configParams, sizeof(configParams)); if (err != OK) { ALOGE("setConfig(OMX_IndexConfigVideoBitrate, %d) failed w/ err %d", videoBitrate, err); return err; } } err = setSurfaceParameters(params); if (err != OK) { ALOGE("Failed to set input surface parameters (err %d)", err); return err; } int32_t tmp; if (params->findInt32("request-sync", &tmp)) { status_t err = requestIDRFrame(); err = requestIDRFrame(); if (err != OK) { ALOGE("Requesting a sync frame failed w/ err %d", err); Loading @@ -7848,7 +7929,7 @@ status_t ACodec::setParameters(const sp<AMessage> ¶ms) { rateFloat = (float) rateInt; // 16MHz (FLINTMAX) is OK for upper bound. } if (rateFloat > 0) { status_t err = setOperatingRate(rateFloat, mIsVideo); err = setOperatingRate(rateFloat, mIsVideo); if (err != OK) { ALOGI("Failed to set parameter 'operating-rate' (err %d)", err); } Loading @@ -7857,7 +7938,7 @@ status_t ACodec::setParameters(const sp<AMessage> ¶ms) { int32_t intraRefreshPeriod = 0; if (params->findInt32("intra-refresh-period", &intraRefreshPeriod) && intraRefreshPeriod > 0) { status_t err = setIntraRefreshPeriod(intraRefreshPeriod, false); err = setIntraRefreshPeriod(intraRefreshPeriod, false); if (err != OK) { ALOGI("[%s] failed setIntraRefreshPeriod. Failure is fine since this key is optional", mComponentName.c_str()); Loading @@ -7867,7 +7948,7 @@ status_t ACodec::setParameters(const sp<AMessage> ¶ms) { int32_t lowLatency = 0; if (params->findInt32("low-latency", &lowLatency)) { status_t err = setLowLatency(lowLatency); err = setLowLatency(lowLatency); if (err != OK) { return err; } Loading @@ -7875,7 +7956,7 @@ status_t ACodec::setParameters(const sp<AMessage> ¶ms) { int32_t latency = 0; if (params->findInt32("latency", &latency) && latency > 0) { status_t err = setLatency(latency); err = setLatency(latency); if (err != OK) { ALOGI("[%s] failed setLatency. Failure is fine since this key is optional", mComponentName.c_str()); Loading @@ -7887,7 +7968,7 @@ status_t ACodec::setParameters(const sp<AMessage> ¶ms) { if (params->findInt32("audio-presentation-presentation-id", &presentationId)) { int32_t programId = -1; params->findInt32("audio-presentation-program-id", &programId); status_t err = setAudioPresentation(presentationId, programId); err = setAudioPresentation(presentationId, programId); if (err != OK) { ALOGI("[%s] failed setAudioPresentation. Failure is fine since this key is optional", mComponentName.c_str()); Loading Loading @@ -7960,7 +8041,7 @@ status_t ACodec::setParameters(const sp<AMessage> ¶ms) { { int32_t tunnelPeek = 0; if (params->findInt32(TUNNEL_PEEK_KEY, &tunnelPeek)) { status_t err = setTunnelPeek(tunnelPeek); err = setTunnelPeek(tunnelPeek); if (err != OK) { return err; } Loading @@ -7969,7 +8050,7 @@ status_t ACodec::setParameters(const sp<AMessage> ¶ms) { { int32_t tunnelPeekSetLegacy = 0; if (params->findInt32(TUNNEL_PEEK_SET_LEGACY_KEY, &tunnelPeekSetLegacy)) { status_t err = setTunnelPeekLegacy(tunnelPeekSetLegacy); err = setTunnelPeekLegacy(tunnelPeekSetLegacy); if (err != OK) { return err; } Loading media/libstagefright/include/media/stagefright/ACodec.h +1 −0 Original line number Diff line number Diff line Loading @@ -601,6 +601,7 @@ private: status_t internalError = UNKNOWN_ERROR); status_t requestIDRFrame(); status_t setSurfaceParameters(const sp<AMessage> ¶ms); status_t setParameters(const sp<AMessage> ¶ms); // set vendor extension parameters specified in params that are supported by the codec Loading Loading
media/libstagefright/ACodec.cpp +110 −29 Original line number Diff line number Diff line Loading @@ -293,6 +293,8 @@ protected: } } void setSurfaceParameters(const sp<AMessage> &msg); private: // Handles an OMX message. Returns true iff message was handled. bool onOMXMessage(const sp<AMessage> &msg); Loading Loading @@ -6502,6 +6504,59 @@ void ACodec::BaseState::getMoreInputDataIfPossible() { postFillThisBuffer(eligible); } void ACodec::BaseState::setSurfaceParameters(const sp<AMessage> &msg) { sp<AMessage> params; CHECK(msg->findMessage("params", ¶ms)); status_t err = mCodec->setSurfaceParameters(params); if (err != OK) { ALOGE("[%s] Unable to set input surface parameters (err %d)", mCodec->mComponentName.c_str(), err); return; } int64_t timeOffsetUs; if (params->findInt64(PARAMETER_KEY_OFFSET_TIME, &timeOffsetUs)) { params->removeEntryAt(params->findEntryByName(PARAMETER_KEY_OFFSET_TIME)); if (params->countEntries() == 0) { msg->removeEntryAt(msg->findEntryByName("params")); return; } } int64_t skipFramesBeforeUs; if (params->findInt64("skip-frames-before", &skipFramesBeforeUs)) { params->removeEntryAt(params->findEntryByName("skip-frames-before")); if (params->countEntries() == 0) { msg->removeEntryAt(msg->findEntryByName("params")); return; } } int32_t dropInputFrames; if (params->findInt32(PARAMETER_KEY_SUSPEND, &dropInputFrames)) { params->removeEntryAt(params->findEntryByName(PARAMETER_KEY_SUSPEND)); if (params->countEntries() == 0) { msg->removeEntryAt(msg->findEntryByName("params")); return; } } int64_t stopTimeUs; if (params->findInt64("stop-time-us", &stopTimeUs)) { params->removeEntryAt(params->findEntryByName("stop-time-us")); if (params->countEntries() == 0) { msg->removeEntryAt(msg->findEntryByName("params")); return; } } } bool ACodec::BaseState::onOMXFillBufferDone( IOMX::buffer_id bufferID, size_t rangeOffset, size_t rangeLength, Loading Loading @@ -7368,6 +7423,13 @@ status_t ACodec::LoadedToIdleState::allocateBuffers() { bool ACodec::LoadedToIdleState::onMessageReceived(const sp<AMessage> &msg) { switch (msg->what()) { case kWhatSetParameters: { BaseState::setSurfaceParameters(msg); if (msg->countEntries() > 0) { mCodec->deferMessage(msg); } return true; } case kWhatShutdown: { mCodec->deferMessage(msg); Loading Loading @@ -7444,6 +7506,13 @@ void ACodec::IdleToExecutingState::stateEntered() { bool ACodec::IdleToExecutingState::onMessageReceived(const sp<AMessage> &msg) { switch (msg->what()) { case kWhatSetParameters: { BaseState::setSurfaceParameters(msg); if (msg->countEntries() > 0) { mCodec->deferMessage(msg); } return true; } case kWhatShutdown: { mCodec->deferMessage(msg); Loading Loading @@ -7723,27 +7792,7 @@ bool ACodec::ExecutingState::onMessageReceived(const sp<AMessage> &msg) { return handled; } status_t ACodec::setParameters(const sp<AMessage> ¶ms) { int32_t videoBitrate; if (params->findInt32("video-bitrate", &videoBitrate)) { OMX_VIDEO_CONFIG_BITRATETYPE configParams; InitOMXParams(&configParams); configParams.nPortIndex = kPortIndexOutput; configParams.nEncodeBitrate = videoBitrate; status_t err = mOMXNode->setConfig( OMX_IndexConfigVideoBitrate, &configParams, sizeof(configParams)); if (err != OK) { ALOGE("setConfig(OMX_IndexConfigVideoBitrate, %d) failed w/ err %d", videoBitrate, err); return err; } } status_t ACodec::setSurfaceParameters(const sp<AMessage> ¶ms) { int64_t timeOffsetUs; if (params->findInt64(PARAMETER_KEY_OFFSET_TIME, &timeOffsetUs)) { if (mGraphicBufferSource == NULL) { Loading Loading @@ -7831,9 +7880,41 @@ status_t ACodec::setParameters(const sp<AMessage> ¶ms) { mInputFormat->setInt64("android._stop-time-offset-us", stopTimeOffsetUs); } return OK; } status_t ACodec::setParameters(const sp<AMessage> ¶ms) { status_t err; int32_t videoBitrate; if (params->findInt32("video-bitrate", &videoBitrate)) { OMX_VIDEO_CONFIG_BITRATETYPE configParams; InitOMXParams(&configParams); configParams.nPortIndex = kPortIndexOutput; configParams.nEncodeBitrate = videoBitrate; err = mOMXNode->setConfig( OMX_IndexConfigVideoBitrate, &configParams, sizeof(configParams)); if (err != OK) { ALOGE("setConfig(OMX_IndexConfigVideoBitrate, %d) failed w/ err %d", videoBitrate, err); return err; } } err = setSurfaceParameters(params); if (err != OK) { ALOGE("Failed to set input surface parameters (err %d)", err); return err; } int32_t tmp; if (params->findInt32("request-sync", &tmp)) { status_t err = requestIDRFrame(); err = requestIDRFrame(); if (err != OK) { ALOGE("Requesting a sync frame failed w/ err %d", err); Loading @@ -7848,7 +7929,7 @@ status_t ACodec::setParameters(const sp<AMessage> ¶ms) { rateFloat = (float) rateInt; // 16MHz (FLINTMAX) is OK for upper bound. } if (rateFloat > 0) { status_t err = setOperatingRate(rateFloat, mIsVideo); err = setOperatingRate(rateFloat, mIsVideo); if (err != OK) { ALOGI("Failed to set parameter 'operating-rate' (err %d)", err); } Loading @@ -7857,7 +7938,7 @@ status_t ACodec::setParameters(const sp<AMessage> ¶ms) { int32_t intraRefreshPeriod = 0; if (params->findInt32("intra-refresh-period", &intraRefreshPeriod) && intraRefreshPeriod > 0) { status_t err = setIntraRefreshPeriod(intraRefreshPeriod, false); err = setIntraRefreshPeriod(intraRefreshPeriod, false); if (err != OK) { ALOGI("[%s] failed setIntraRefreshPeriod. Failure is fine since this key is optional", mComponentName.c_str()); Loading @@ -7867,7 +7948,7 @@ status_t ACodec::setParameters(const sp<AMessage> ¶ms) { int32_t lowLatency = 0; if (params->findInt32("low-latency", &lowLatency)) { status_t err = setLowLatency(lowLatency); err = setLowLatency(lowLatency); if (err != OK) { return err; } Loading @@ -7875,7 +7956,7 @@ status_t ACodec::setParameters(const sp<AMessage> ¶ms) { int32_t latency = 0; if (params->findInt32("latency", &latency) && latency > 0) { status_t err = setLatency(latency); err = setLatency(latency); if (err != OK) { ALOGI("[%s] failed setLatency. Failure is fine since this key is optional", mComponentName.c_str()); Loading @@ -7887,7 +7968,7 @@ status_t ACodec::setParameters(const sp<AMessage> ¶ms) { if (params->findInt32("audio-presentation-presentation-id", &presentationId)) { int32_t programId = -1; params->findInt32("audio-presentation-program-id", &programId); status_t err = setAudioPresentation(presentationId, programId); err = setAudioPresentation(presentationId, programId); if (err != OK) { ALOGI("[%s] failed setAudioPresentation. Failure is fine since this key is optional", mComponentName.c_str()); Loading Loading @@ -7960,7 +8041,7 @@ status_t ACodec::setParameters(const sp<AMessage> ¶ms) { { int32_t tunnelPeek = 0; if (params->findInt32(TUNNEL_PEEK_KEY, &tunnelPeek)) { status_t err = setTunnelPeek(tunnelPeek); err = setTunnelPeek(tunnelPeek); if (err != OK) { return err; } Loading @@ -7969,7 +8050,7 @@ status_t ACodec::setParameters(const sp<AMessage> ¶ms) { { int32_t tunnelPeekSetLegacy = 0; if (params->findInt32(TUNNEL_PEEK_SET_LEGACY_KEY, &tunnelPeekSetLegacy)) { status_t err = setTunnelPeekLegacy(tunnelPeekSetLegacy); err = setTunnelPeekLegacy(tunnelPeekSetLegacy); if (err != OK) { return err; } Loading
media/libstagefright/include/media/stagefright/ACodec.h +1 −0 Original line number Diff line number Diff line Loading @@ -601,6 +601,7 @@ private: status_t internalError = UNKNOWN_ERROR); status_t requestIDRFrame(); status_t setSurfaceParameters(const sp<AMessage> ¶ms); status_t setParameters(const sp<AMessage> ¶ms); // set vendor extension parameters specified in params that are supported by the codec Loading