| 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_
|
|
|