// Copyright 2017 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_GPU_ANDROID_CODEC_SURFACE_BUNDLE_H_
#define MEDIA_GPU_ANDROID_CODEC_SURFACE_BUNDLE_H_

#include "base/memory/ref_counted_delete_on_sequence.h"
#include "gpu/command_buffer/service/texture_owner.h"
#include "media/base/android/android_overlay.h"
#include "media/gpu/android/codec_buffer_wait_coordinator.h"
#include "media/gpu/media_gpu_export.h"
#include "ui/gl/android/scoped_java_surface.h"

namespace gpu {
class RefCountedLock;
}  // namespace gpu

namespace media {

// CodecSurfaceBundle is a Java surface, and the TextureOwner or Overlay that
// backs it.
//
// Once a MediaCodec is configured with an output surface, the corresponding
// CodecSurfaceBundle should be kept alive as long as the codec to prevent
// crashes due to the codec losing its output surface.
class MEDIA_GPU_EXPORT CodecSurfaceBundle
    : public base::RefCountedDeleteOnSequence<CodecSurfaceBundle> {
 public:
  using ScheduleLayoutCB = base::RepeatingCallback<void(const gfx::Rect&)>;

  // Create an empty bundle to be manually populated.
  CodecSurfaceBundle();
  explicit CodecSurfaceBundle(std::unique_ptr<AndroidOverlay> overlay);
  explicit CodecSurfaceBundle(scoped_refptr<gpu::TextureOwner> texture_owner,
                              scoped_refptr<gpu::RefCountedLock> drdc_lock);

  const base::android::JavaRef<jobject>& GetJavaSurface() const;

  // Returns a callback that can be used to position this overlay.  It must be
  // called on the correct thread for the overlay.  It will not keep a ref to
  // |this|; the cb will do nothing if |this| is destroyed.
  ScheduleLayoutCB GetScheduleLayoutCB();

  scoped_refptr<CodecBufferWaitCoordinator> codec_buffer_wait_coordinator()
      const {
    return codec_buffer_wait_coordinator_;
  }
  AndroidOverlay* overlay() const { return overlay_.get(); }

 private:
  ~CodecSurfaceBundle();
  friend class base::RefCountedDeleteOnSequence<CodecSurfaceBundle>;
  friend class base::DeleteHelper<CodecSurfaceBundle>;

  void ScheduleLayout(const gfx::Rect& rect);

  // The Overlay or TextureOwner.
  std::unique_ptr<AndroidOverlay> overlay_;

  // |codec_buffer_wait_coordinator_| owns the TextureOwner.
  scoped_refptr<CodecBufferWaitCoordinator> codec_buffer_wait_coordinator_;

  // The Java surface for |codec_buffer_wait_coordinator_|'s TextureOwner.
  gl::ScopedJavaSurface texture_owner_surface_;

  // The last updated layout rect position for the |overlay|.
  gfx::Rect layout_rect_;

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

  DISALLOW_COPY_AND_ASSIGN(CodecSurfaceBundle);
};

}  // namespace media

#endif  // MEDIA_GPU_ANDROID_CODEC_SURFACE_BUNDLE_H_
