// Copyright 2019 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 MEDIA_BLINK_SMOOTHNESS_HELPER_H_ #define MEDIA_BLINK_SMOOTHNESS_HELPER_H_ #include #include "media/base/buffering_state.h" #include "media/base/pipeline_status.h" #include "media/blink/media_blink_export.h" #include "media/learning/common/labelled_example.h" namespace media { namespace learning { class LearningTaskController; } // Helper class to construct learning observations about the smoothness of a // video playback. Currently measures the worst-case frame drop ratio observed // among fixed-length segments. class MEDIA_BLINK_EXPORT SmoothnessHelper { public: // Callback that provides the number of dropped / decoded frames since some // point in the past. We assume that these values are comparable during // playback, so that we can compute deltas. class Client { public: virtual ~Client() {} virtual unsigned DecodedFrameCount() const = 0; virtual unsigned DroppedFrameCount() const = 0; }; virtual ~SmoothnessHelper(); // Return the features that we were constructed with. const learning::FeatureVector& features() const { return features_; } // Notify us that an NNR has occurred. virtual void NotifyNNR() = 0; // |features| are the features that we'll use for any labelled examples that // we create. They should be features that could be captured at the time a // prediction would be needed. static std::unique_ptr Create( std::unique_ptr bad_controller, std::unique_ptr nnr_controller, const learning::FeatureVector& features, Client* player); // We split playbacks up into |kSegmentSize| units, and record the worst // dropped frame ratio over all segments of a playback. A playback is not // recorded if it doesn't contain at least one full segment. static base::TimeDelta SegmentSizeForTesting(); protected: SmoothnessHelper(const learning::FeatureVector& features); learning::FeatureVector features_; }; } // namespace media #endif // MEDIA_BLINK_SMOOTHNESS_HELPER_H_