Loading cmds/stagefright/AudioPlayer.h +1 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ #define AUDIO_PLAYER_H_ #include <media/AudioResamplerPublic.h> #include <media/stagefright/MediaSource.h> #include <media/MediaPlayerInterface.h> #include <media/stagefright/MediaBuffer.h> Loading @@ -25,7 +26,6 @@ namespace android { struct AudioPlaybackRate; class AudioTrack; struct AwesomePlayer; Loading media/codec2/TEST_MAPPING +4 −2 Original line number Diff line number Diff line { "postsubmit": [ "presubmit": [ { // TODO: move to presubmit once we verify the tests are not flaky "name": "CtsMediaTestCases", "options": [ { Loading @@ -13,6 +12,9 @@ // TODO: b/149314419 { "exclude-filter": "android.media.cts.AudioPlaybackCaptureTest" }, { "exclude-filter": "android.media.cts.AudioRecordTest" } ] } Loading media/codec2/sfplugin/Android.bp +1 −1 Original line number Diff line number Diff line Loading @@ -45,7 +45,7 @@ cc_library_shared { "libmedia_codeclist", "libmedia_omx", "libsfplugin_ccodec_utils", "libstagefright_bufferqueue_helper_client", "libstagefright_bufferqueue_helper", "libstagefright_codecbase", "libstagefright_foundation", "libstagefright_omx", Loading media/codec2/sfplugin/CCodec.cpp +28 −7 Original line number Diff line number Diff line Loading @@ -668,7 +668,7 @@ void CCodec::allocate(const sp<MediaCodecInfo> &codecInfo) { // initialize config here in case setParameters is called prior to configure Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig); const std::unique_ptr<Config> &config = *configLocked; status_t err = config->initialize(mClient, comp); status_t err = config->initialize(mClient->getParamReflector(), comp); if (err != OK) { ALOGW("Failed to initialize configuration support"); // TODO: report error once we complete implementation. Loading Loading @@ -884,6 +884,13 @@ void CCodec::configure(const sp<AMessage> &msg) { } } int32_t subscribeToAllVendorParams; if (msg->findInt32("x-*", &subscribeToAllVendorParams) && subscribeToAllVendorParams) { if (config->subscribeToAllVendorParams(comp, C2_MAY_BLOCK) != OK) { ALOGD("[%s] Failed to subscribe to all vendor params", comp->getName().c_str()); } } std::vector<std::unique_ptr<C2Param>> configUpdate; // NOTE: We used to ignore "video-bitrate" at configure; replicate // the behavior here. Loading Loading @@ -1192,7 +1199,7 @@ status_t CCodec::setupInputSurface(const std::shared_ptr<InputSurfaceWrapper> &s // we are now using surface - apply default color aspects to input format - as well as // get dataspace bool inputFormatChanged = config->updateFormats(config->IS_INPUT); bool inputFormatChanged = config->updateFormats(Config::IS_INPUT); ALOGD("input format %s to %s", inputFormatChanged ? "changed" : "unchanged", config->mInputFormat->debugString().c_str()); Loading @@ -1207,7 +1214,7 @@ status_t CCodec::setupInputSurface(const std::shared_ptr<InputSurfaceWrapper> &s if (err != OK) { // undo input format update config->mUsingSurface = false; (void)config->updateFormats(config->IS_INPUT); (void)config->updateFormats(Config::IS_INPUT); return err; } config->mInputSurface = surface; Loading Loading @@ -1323,6 +1330,8 @@ void CCodec::start() { mCallback->onError(err2, ACTION_CODE_FATAL); return; } // We're not starting after flush. (void)mSentConfigAfterResume.test_and_set(); err2 = mChannel->start(inputFormat, outputFormat, buffersBoundToCodec); if (err2 != OK) { mCallback->onError(err2, ACTION_CODE_FATAL); Loading Loading @@ -1555,18 +1564,27 @@ void CCodec::flush() { } void CCodec::signalResume() { auto setResuming = [this] { std::shared_ptr<Codec2Client::Component> comp; auto setResuming = [this, &comp] { Mutexed<State>::Locked state(mState); if (state->get() != FLUSHED) { return UNKNOWN_ERROR; } state->set(RESUMING); comp = state->comp; return OK; }; if (tryAndReportOnError(setResuming) != OK) { return; } mSentConfigAfterResume.clear(); { Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig); const std::unique_ptr<Config> &config = *configLocked; config->queryConfiguration(comp); } (void)mChannel->start(nullptr, nullptr, [&]{ Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig); const std::unique_ptr<Config> &config = *configLocked; Loading Loading @@ -1617,7 +1635,8 @@ void CCodec::signalSetParameters(const sp<AMessage> &msg) { * Handle input surface parameters */ if ((config->mDomain & (Config::IS_VIDEO | Config::IS_IMAGE)) && (config->mDomain & Config::IS_ENCODER) && config->mInputSurface && config->mISConfig) { && (config->mDomain & Config::IS_ENCODER) && config->mInputSurface && config->mISConfig) { (void)params->findInt64(PARAMETER_KEY_OFFSET_TIME, &config->mISConfig->mTimeOffsetUs); if (params->findInt64("skip-frames-before", &config->mISConfig->mStartAtUs)) { Loading Loading @@ -1770,7 +1789,7 @@ void CCodec::onMessageReceived(const sp<AMessage> &msg) { // handle configuration changes in work done Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig); const std::unique_ptr<Config> &config = *configLocked; bool changed = false; bool changed = !mSentConfigAfterResume.test_and_set(); Config::Watcher<C2StreamInitDataInfo::output> initData = config->watch<C2StreamInitDataInfo::output>(); if (!work->worklets.empty() Loading Loading @@ -1802,7 +1821,9 @@ void CCodec::onMessageReceived(const sp<AMessage> &msg) { ++stream; } changed = config->updateConfiguration(updates, config->mOutputDomain); if (config->updateConfiguration(updates, config->mOutputDomain)) { changed = true; } // copy standard infos to graphic buffers if not already present (otherwise, we // may overwrite the actual intermediate value with a final value) Loading media/codec2/sfplugin/CCodecBufferChannel.cpp +18 −18 Original line number Diff line number Diff line Loading @@ -1457,6 +1457,24 @@ bool CCodecBufferChannel::handleWork( std::unique_ptr<C2Work> work, const sp<AMessage> &outputFormat, const C2StreamInitDataInfo::output *initData) { if (outputFormat != nullptr) { Mutexed<Output>::Locked output(mOutput); ALOGD("[%s] onWorkDone: output format changed to %s", mName, outputFormat->debugString().c_str()); output->buffers->setFormat(outputFormat); AString mediaType; if (outputFormat->findString(KEY_MIME, &mediaType) && mediaType == MIMETYPE_AUDIO_RAW) { int32_t channelCount; int32_t sampleRate; if (outputFormat->findInt32(KEY_CHANNEL_COUNT, &channelCount) && outputFormat->findInt32(KEY_SAMPLE_RATE, &sampleRate)) { output->buffers->updateSkipCutBuffer(sampleRate, channelCount); } } } if ((work->input.ordinal.frameIndex - mFirstValidFrameIndex.load()).peek() < 0) { // Discard frames from previous generation. ALOGD("[%s] Discard frames from previous generation.", mName); Loading Loading @@ -1634,24 +1652,6 @@ bool CCodecBufferChannel::handleWork( } } if (outputFormat != nullptr) { Mutexed<Output>::Locked output(mOutput); ALOGD("[%s] onWorkDone: output format changed to %s", mName, outputFormat->debugString().c_str()); output->buffers->setFormat(outputFormat); AString mediaType; if (outputFormat->findString(KEY_MIME, &mediaType) && mediaType == MIMETYPE_AUDIO_RAW) { int32_t channelCount; int32_t sampleRate; if (outputFormat->findInt32(KEY_CHANNEL_COUNT, &channelCount) && outputFormat->findInt32(KEY_SAMPLE_RATE, &sampleRate)) { output->buffers->updateSkipCutBuffer(sampleRate, channelCount); } } } int32_t flags = 0; if (worklet->output.flags & C2FrameData::FLAG_END_OF_STREAM) { flags |= MediaCodec::BUFFER_FLAG_EOS; Loading Loading
cmds/stagefright/AudioPlayer.h +1 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ #define AUDIO_PLAYER_H_ #include <media/AudioResamplerPublic.h> #include <media/stagefright/MediaSource.h> #include <media/MediaPlayerInterface.h> #include <media/stagefright/MediaBuffer.h> Loading @@ -25,7 +26,6 @@ namespace android { struct AudioPlaybackRate; class AudioTrack; struct AwesomePlayer; Loading
media/codec2/TEST_MAPPING +4 −2 Original line number Diff line number Diff line { "postsubmit": [ "presubmit": [ { // TODO: move to presubmit once we verify the tests are not flaky "name": "CtsMediaTestCases", "options": [ { Loading @@ -13,6 +12,9 @@ // TODO: b/149314419 { "exclude-filter": "android.media.cts.AudioPlaybackCaptureTest" }, { "exclude-filter": "android.media.cts.AudioRecordTest" } ] } Loading
media/codec2/sfplugin/Android.bp +1 −1 Original line number Diff line number Diff line Loading @@ -45,7 +45,7 @@ cc_library_shared { "libmedia_codeclist", "libmedia_omx", "libsfplugin_ccodec_utils", "libstagefright_bufferqueue_helper_client", "libstagefright_bufferqueue_helper", "libstagefright_codecbase", "libstagefright_foundation", "libstagefright_omx", Loading
media/codec2/sfplugin/CCodec.cpp +28 −7 Original line number Diff line number Diff line Loading @@ -668,7 +668,7 @@ void CCodec::allocate(const sp<MediaCodecInfo> &codecInfo) { // initialize config here in case setParameters is called prior to configure Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig); const std::unique_ptr<Config> &config = *configLocked; status_t err = config->initialize(mClient, comp); status_t err = config->initialize(mClient->getParamReflector(), comp); if (err != OK) { ALOGW("Failed to initialize configuration support"); // TODO: report error once we complete implementation. Loading Loading @@ -884,6 +884,13 @@ void CCodec::configure(const sp<AMessage> &msg) { } } int32_t subscribeToAllVendorParams; if (msg->findInt32("x-*", &subscribeToAllVendorParams) && subscribeToAllVendorParams) { if (config->subscribeToAllVendorParams(comp, C2_MAY_BLOCK) != OK) { ALOGD("[%s] Failed to subscribe to all vendor params", comp->getName().c_str()); } } std::vector<std::unique_ptr<C2Param>> configUpdate; // NOTE: We used to ignore "video-bitrate" at configure; replicate // the behavior here. Loading Loading @@ -1192,7 +1199,7 @@ status_t CCodec::setupInputSurface(const std::shared_ptr<InputSurfaceWrapper> &s // we are now using surface - apply default color aspects to input format - as well as // get dataspace bool inputFormatChanged = config->updateFormats(config->IS_INPUT); bool inputFormatChanged = config->updateFormats(Config::IS_INPUT); ALOGD("input format %s to %s", inputFormatChanged ? "changed" : "unchanged", config->mInputFormat->debugString().c_str()); Loading @@ -1207,7 +1214,7 @@ status_t CCodec::setupInputSurface(const std::shared_ptr<InputSurfaceWrapper> &s if (err != OK) { // undo input format update config->mUsingSurface = false; (void)config->updateFormats(config->IS_INPUT); (void)config->updateFormats(Config::IS_INPUT); return err; } config->mInputSurface = surface; Loading Loading @@ -1323,6 +1330,8 @@ void CCodec::start() { mCallback->onError(err2, ACTION_CODE_FATAL); return; } // We're not starting after flush. (void)mSentConfigAfterResume.test_and_set(); err2 = mChannel->start(inputFormat, outputFormat, buffersBoundToCodec); if (err2 != OK) { mCallback->onError(err2, ACTION_CODE_FATAL); Loading Loading @@ -1555,18 +1564,27 @@ void CCodec::flush() { } void CCodec::signalResume() { auto setResuming = [this] { std::shared_ptr<Codec2Client::Component> comp; auto setResuming = [this, &comp] { Mutexed<State>::Locked state(mState); if (state->get() != FLUSHED) { return UNKNOWN_ERROR; } state->set(RESUMING); comp = state->comp; return OK; }; if (tryAndReportOnError(setResuming) != OK) { return; } mSentConfigAfterResume.clear(); { Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig); const std::unique_ptr<Config> &config = *configLocked; config->queryConfiguration(comp); } (void)mChannel->start(nullptr, nullptr, [&]{ Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig); const std::unique_ptr<Config> &config = *configLocked; Loading Loading @@ -1617,7 +1635,8 @@ void CCodec::signalSetParameters(const sp<AMessage> &msg) { * Handle input surface parameters */ if ((config->mDomain & (Config::IS_VIDEO | Config::IS_IMAGE)) && (config->mDomain & Config::IS_ENCODER) && config->mInputSurface && config->mISConfig) { && (config->mDomain & Config::IS_ENCODER) && config->mInputSurface && config->mISConfig) { (void)params->findInt64(PARAMETER_KEY_OFFSET_TIME, &config->mISConfig->mTimeOffsetUs); if (params->findInt64("skip-frames-before", &config->mISConfig->mStartAtUs)) { Loading Loading @@ -1770,7 +1789,7 @@ void CCodec::onMessageReceived(const sp<AMessage> &msg) { // handle configuration changes in work done Mutexed<std::unique_ptr<Config>>::Locked configLocked(mConfig); const std::unique_ptr<Config> &config = *configLocked; bool changed = false; bool changed = !mSentConfigAfterResume.test_and_set(); Config::Watcher<C2StreamInitDataInfo::output> initData = config->watch<C2StreamInitDataInfo::output>(); if (!work->worklets.empty() Loading Loading @@ -1802,7 +1821,9 @@ void CCodec::onMessageReceived(const sp<AMessage> &msg) { ++stream; } changed = config->updateConfiguration(updates, config->mOutputDomain); if (config->updateConfiguration(updates, config->mOutputDomain)) { changed = true; } // copy standard infos to graphic buffers if not already present (otherwise, we // may overwrite the actual intermediate value with a final value) Loading
media/codec2/sfplugin/CCodecBufferChannel.cpp +18 −18 Original line number Diff line number Diff line Loading @@ -1457,6 +1457,24 @@ bool CCodecBufferChannel::handleWork( std::unique_ptr<C2Work> work, const sp<AMessage> &outputFormat, const C2StreamInitDataInfo::output *initData) { if (outputFormat != nullptr) { Mutexed<Output>::Locked output(mOutput); ALOGD("[%s] onWorkDone: output format changed to %s", mName, outputFormat->debugString().c_str()); output->buffers->setFormat(outputFormat); AString mediaType; if (outputFormat->findString(KEY_MIME, &mediaType) && mediaType == MIMETYPE_AUDIO_RAW) { int32_t channelCount; int32_t sampleRate; if (outputFormat->findInt32(KEY_CHANNEL_COUNT, &channelCount) && outputFormat->findInt32(KEY_SAMPLE_RATE, &sampleRate)) { output->buffers->updateSkipCutBuffer(sampleRate, channelCount); } } } if ((work->input.ordinal.frameIndex - mFirstValidFrameIndex.load()).peek() < 0) { // Discard frames from previous generation. ALOGD("[%s] Discard frames from previous generation.", mName); Loading Loading @@ -1634,24 +1652,6 @@ bool CCodecBufferChannel::handleWork( } } if (outputFormat != nullptr) { Mutexed<Output>::Locked output(mOutput); ALOGD("[%s] onWorkDone: output format changed to %s", mName, outputFormat->debugString().c_str()); output->buffers->setFormat(outputFormat); AString mediaType; if (outputFormat->findString(KEY_MIME, &mediaType) && mediaType == MIMETYPE_AUDIO_RAW) { int32_t channelCount; int32_t sampleRate; if (outputFormat->findInt32(KEY_CHANNEL_COUNT, &channelCount) && outputFormat->findInt32(KEY_SAMPLE_RATE, &sampleRate)) { output->buffers->updateSkipCutBuffer(sampleRate, channelCount); } } } int32_t flags = 0; if (worklet->output.flags & C2FrameData::FLAG_END_OF_STREAM) { flags |= MediaCodec::BUFFER_FLAG_EOS; Loading