123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- // Copyright 2014 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_BASE_BUFFERING_STATE_H_
- #define MEDIA_BASE_BUFFERING_STATE_H_
- #include <string>
- #include "base/callback_forward.h"
- namespace media {
- enum BufferingState {
- // Indicates that there is no data buffered.
- //
- // Typical reason is data underflow and hence playback should be paused.
- BUFFERING_HAVE_NOTHING,
- // Indicates that enough data has been buffered.
- //
- // Typical reason is enough data has been prerolled to start playback.
- BUFFERING_HAVE_ENOUGH,
- BUFFERING_STATE_MAX = BUFFERING_HAVE_ENOUGH,
- };
- enum BufferingStateChangeReason {
- // The reason for the change is not known. This is a valid value for both
- // HAVE_NOTHING and HAVE_ENOUGH states. Notably, it is used with all
- // HAVE_ENOUGH events. The real cause of have HAVE_ENOUGH events is either
- // completion of initial pre-roll, or a resolution of the previous underflow's
- // cause. Interested observers can determine this by checking the most recent
- // state change events. This reason may also be provided for some HAVE_NOTHING
- // events where it is architecturally difficult to determine the cause.
- BUFFERING_CHANGE_REASON_UNKNOWN,
- // Renderer ran out of decoded frames because of delay getting more encoded
- // data from the demuxer. For src=, this indicates network slowness. For MSE
- // it means the data wasn't appended in time (probably also network slowness).
- DEMUXER_UNDERFLOW,
- // Renderer ran out of decoded frames because decoder couldn't keep up.
- DECODER_UNDERFLOW,
- // The local demuxer has the data, but the remote renderer (e.g. cast) hasn't
- // received it yet. Only possible during media "remoting".
- REMOTING_NETWORK_CONGESTION,
- BUFFERING_STATE_CHANGE_REASON_MAX = REMOTING_NETWORK_CONGESTION,
- };
- enum class SerializableBufferingStateType {
- kPipeline,
- kVideo,
- kAudio,
- };
- // A serializable combo of the state, type, and reason.
- template <SerializableBufferingStateType T>
- struct SerializableBufferingState {
- BufferingState state;
- BufferingStateChangeReason reason;
- // Only included in the serialized state if |type == kPipeline|
- bool suspended_start = false;
- };
- // Used to indicate changes in buffering state;
- using BufferingStateCB =
- base::RepeatingCallback<void(BufferingState, BufferingStateChangeReason)>;
- std::string BufferingStateToString(
- BufferingState state,
- BufferingStateChangeReason reason = BUFFERING_CHANGE_REASON_UNKNOWN);
- } // namespace media
- #endif // MEDIA_BASE_BUFFERING_STATE_H_
|