Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1136)

Unified Diff: services/media/common/rate_control_base.h

Issue 1986303002: Motown: Use new TimelineTransform and related definitions (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Fixes per feedback. Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « services/media/common/mojo_publisher.h ('k') | services/media/common/rate_control_base.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: services/media/common/rate_control_base.h
diff --git a/services/media/common/rate_control_base.h b/services/media/common/rate_control_base.h
deleted file mode 100644
index 95d55fad7f8a4f299799dd695e845c52901898b4..0000000000000000000000000000000000000000
--- a/services/media/common/rate_control_base.h
+++ /dev/null
@@ -1,108 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef SERVICES_MEDIA_COMMON_RATE_CONTROL_BASE_H_
-#define SERVICES_MEDIA_COMMON_RATE_CONTROL_BASE_H_
-
-#include <deque>
-
-#include "base/synchronization/lock.h"
-#include "mojo/public/cpp/bindings/binding.h"
-#include "mojo/services/media/common/cpp/linear_transform.h"
-#include "mojo/services/media/common/interfaces/media_common.mojom.h"
-#include "mojo/services/media/common/interfaces/rate_control.mojom.h"
-
-namespace mojo {
-namespace media {
-
-class RateControlBase : public RateControl {
- public:
- // Default constructor and destructor
- RateControlBase();
- ~RateControlBase() override;
-
- bool Bind(InterfaceRequest<RateControl> request);
- bool is_bound() const { return binding_.is_bound(); }
-
- // Close any existing connections to clients, clear any pending rate changes
- // and set the clock rate to 0/1.
- void Reset();
-
- // TODO(johngro): snapshotting the current transform requires an evaluation of
- // all the pending timeline transformations. Currently, we allow users to
- // schedule an arbitrary number of pending transformations. This could cause
- // DoS hazards if a malicious (or just poorly written) application is
- // schedules a ton of transformations, and then something like the mixer
- // threads in the audio server is forced to collapse all of these
- // transformations in order to mix then next set of outbound audio frames.
- //
- // A simple way to avoid this would be to allow the user to have only one
- // pending transformation at any point in time.
- //
- // It would be nice to be able to simply return the transformation and use
- // Rvalue references in calling code to access the temporary snapshot, but
- // style does not permit us to use Rvalue references in such a way.
- //
- // Also; the way pending transformations get applied probably needs to be
- // re-worked. Currently, when we snapshot, we collapse any pending
- // transformations which should have occurred relative to LocalClock::now()
- // into the current transformation. For both video and audio, however, we are
- // always mixing/composing for a point in time in the near future, not for
- // right now. We really want to given the mixer compositor a view of what the
- // transformation is going to be at the mix/composition point, not what it is
- // now. Additionally, since audio process many frames at a time, we need to
- // give the audio mixer some knowledge of when we think the snapshotted
- // transformation is going to change next. The audio mixer wants to mix up to
- // that point, but not past it, and then fetch the new transformation before
- // proceeding.
- void SnapshotCurrentTransform(LinearTransform* out,
- uint32_t* generation = nullptr);
-
- // RateControl interface
- //
- void GetCurrentTransform(const GetCurrentTransformCallback& cbk) override;
- void SetTargetTimelineID(uint32_t id) override;
- void SetCurrentQuad(TimelineQuadPtr quad) override;
- void SetRate(uint32_t reference_delta, uint32_t target_delta) override;
- void SetRateAtReferenceTime(uint32_t reference_delta,
- uint32_t target_delta,
- int64_t reference_time) override;
- void SetRateAtTargetTime(uint32_t reference_delta,
- uint32_t target_delta,
- int64_t target_time) override;
- void CancelPendingChanges() override;
-
- protected:
- void ApplyPendingChangesLocked(int64_t target_now);
- void AdvanceGenerationLocked() {
- // bump the generation counter. Do not use the value 0.
- while (!(++generation_)) {}
- }
- void OnIllegalRateChange(uint32_t numerator, uint32_t denominator);
-
- Binding<RateControl> binding_;
- uint32_t target_timeline_id = TimelineTransform::kLocalTimeID;
-
- // Transformation state.
- //
- // Note: We use the LinearTransforms such that space A is the target timeline
- // and space B is the reference timeline. Applying this convention,
- // transforming from target to reference is the "forward" transformation and
- // is always defined. Transforming from reference to target is the "reverse"
- // transformation, and is only defined when we are not paused.
- // <pedantic>
- // OK; It is defined, but the equation has a singularity and the mapping is
- // not 1-to-1.
- // </pedantic>.
- base::Lock transform_lock_;
- LinearTransform current_transform_;
- std::deque<LinearTransform> reference_pending_changes_;
- std::deque<LinearTransform> target_pending_changes_;
- uint32_t generation_ = 1;
-};
-
-} // namespace media
-} // namespace mojo
-
-#endif // SERVICES_MEDIA_COMMON_RATE_CONTROL_BASE_H_
« no previous file with comments | « services/media/common/mojo_publisher.h ('k') | services/media/common/rate_control_base.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698