// Copyright 2021 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_FUCHSIA_COMMON_DECRYPTING_SYSMEM_BUFFER_STREAM_H_
#define MEDIA_FUCHSIA_COMMON_DECRYPTING_SYSMEM_BUFFER_STREAM_H_

#include "media/fuchsia/common/passthrough_sysmem_buffer_stream.h"

#include <deque>

#include "media/base/cdm_context.h"
#include "media/base/decryptor.h"

namespace media {

// A SysmemBufferStream that decrypts the stream before copying the data to
// sysmem buffers.
class MEDIA_EXPORT DecryptingSysmemBufferStream : public SysmemBufferStream {
 public:
  DecryptingSysmemBufferStream(SysmemAllocatorClient* sysmem_allocator,
                               CdmContext* cdm_context,
                               Decryptor::StreamType stream_type);
  ~DecryptingSysmemBufferStream() override;

  DecryptingSysmemBufferStream(const DecryptingSysmemBufferStream&) = delete;
  DecryptingSysmemBufferStream& operator=(const DecryptingSysmemBufferStream&) =
      delete;

  // SysmemBufferStream implementation:
  void Initialize(Sink* sink,
                  size_t min_buffer_size,
                  size_t min_buffer_count) override;
  void EnqueueBuffer(scoped_refptr<DecoderBuffer> buffer) override;
  void Reset() override;

 private:
  enum class State {
    kIdle,
    kDecryptPending,
    kWaitingKey,
  };

  void OnCdmContextEvent(CdmContext::Event event);
  void DecryptNextBuffer();
  void OnBufferDecrypted(Decryptor::Status status,
                         scoped_refptr<DecoderBuffer> decrypted_buffer);

  PassthroughSysmemBufferStream passthrough_stream_;
  Decryptor* const decryptor_;
  const Decryptor::StreamType stream_type_;

  std::unique_ptr<CallbackRegistration> event_cb_registration_;

  Sink* sink_ = nullptr;
  std::deque<scoped_refptr<DecoderBuffer>> buffer_queue_;
  State state_ = State::kIdle;

  bool retry_on_no_key_ = false;

  base::WeakPtrFactory<DecryptingSysmemBufferStream> weak_factory_{this};
};

}  // namespace media

#endif  // MEDIA_FUCHSIA_COMMON_DECRYPTING_SYSMEM_BUFFER_STREAM_H_