// Copyright 2018 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_WAITING_H_ #define MEDIA_BASE_WAITING_H_ #include "base/callback_forward.h" namespace media { // Here "waiting" refers to the state that media pipeline stalls waiting because // of some reason, e.g. no decryption key. It could cause Javascript events like // "waitingforkey" [1], but not necessarily. // Note: this generally does not cause the "waiting" event on HTML5 media // elements [2], which is tightly related to the buffering state change (see // buffering_state.h). // [1] https://www.w3.org/TR/encrypted-media/#dom-evt-waitingforkey // [2] // https://www.w3.org/TR/html5/semantics-embedded-content.html#eventdef-media-waiting enum class WaitingReason { // The playback cannot start because "Media Data May Contain Encrypted Blocks" // and no CDM is available. The playback will start after a CDM is set. See // https://www.w3.org/TR/encrypted-media/#media-may-contain-encrypted-blocks kNoCdm, // The playback cannot proceed because some decryption key is not available. // This could happen when the license exchange is delayed or failed. The // playback will resume after the decryption key becomes available. // See https://www.w3.org/TR/encrypted-media/#encrypted-block-encountered kNoDecryptionKey, // The playback cannot proceed because the decoder has lost its state, e.g. // information about reference frames. Usually this only happens to hardware // decoders. To recover from this state, reset the decoder and start decoding // from a key frame, which can typically be accomplished by a pipeline seek. kDecoderStateLost, // Must be assigned with the last enum value above. kMaxValue = kDecoderStateLost, }; // Callback to notify waiting state and the reason. using WaitingCB = base::RepeatingCallback; } // namespace media #endif // MEDIA_BASE_WAITING_H_