| Index: media/gpu/avda_codec_allocator.h
|
| diff --git a/media/gpu/avda_codec_allocator.h b/media/gpu/avda_codec_allocator.h
|
| index b1b9a405d3de2e01d9cf9b7e30494cb6d751f51a..44dac6266c995f874a4e3f42a5290b41125fabca 100644
|
| --- a/media/gpu/avda_codec_allocator.h
|
| +++ b/media/gpu/avda_codec_allocator.h
|
| @@ -19,6 +19,7 @@
|
| #include "base/threading/thread_checker.h"
|
| #include "base/time/tick_clock.h"
|
| #include "base/trace_event/trace_event.h"
|
| +#include "media/base/android/android_overlay.h"
|
| #include "media/base/android/media_codec_bridge_impl.h"
|
| #include "media/base/android/media_drm_bridge_cdm_context.h"
|
| #include "media/base/media.h"
|
| @@ -49,14 +50,30 @@ class CodecConfig : public base::RefCountedThreadSafe<CodecConfig> {
|
|
|
| VideoCodec codec = kUnknownVideoCodec;
|
|
|
| - // The surface that MediaCodec is configured to output to.
|
| - gl::ScopedJavaSurface surface;
|
| + // The surface that MediaCodec is configured to output to. This can be either
|
| + // a SurfaceTexture or other Surface provider.
|
| + // TODO(liberato): it would be nice if we had an abstraction that included
|
| + // SurfaceTexture and Overlay, but we don't right now.
|
| + const base::android::JavaRef<jobject>& j_surface() const {
|
| + if (overlay)
|
| + return overlay->j_surface();
|
| + else
|
| + return surface_texture_surface.j_surface();
|
| + }
|
| +
|
| + // Surface ID, if we're using a ContentVideoViewOverlay.
|
| int surface_id = SurfaceManager::kNoSurfaceID;
|
|
|
| - // The SurfaceTexture attached to |surface|, or nullptr if |surface| is
|
| - // SurfaceView backed.
|
| + // If |overlay| is non-null, then |overlay| owns |surface|.
|
| + std::unique_ptr<AndroidOverlay> overlay;
|
| +
|
| + // The SurfaceTexture attached to |surface_texture_surface|, or nullptr if
|
| + // this is SurfaceView backed.
|
| scoped_refptr<gl::SurfaceTexture> surface_texture;
|
|
|
| + // If |surface_texture| is not null, then this is the surface for it.
|
| + gl::ScopedJavaSurface surface_texture_surface;
|
| +
|
| // The MediaCrypto that MediaCodec is configured with for an encrypted stream.
|
| MediaDrmBridgeCdmContext::JavaObjectPtr media_crypto;
|
|
|
| @@ -84,7 +101,7 @@ class CodecConfig : public base::RefCountedThreadSafe<CodecConfig> {
|
| DISALLOW_COPY_AND_ASSIGN(CodecConfig);
|
| };
|
|
|
| -class AVDACodecAllocatorClient {
|
| +class AVDASurfaceAllocatorClient {
|
| public:
|
| // Called when the requested SurfaceView becomes available after a call to
|
| // AllocateSurface()
|
| @@ -96,9 +113,16 @@ class AVDACodecAllocatorClient {
|
| // need to call DeallocateSurface();
|
| virtual void OnSurfaceDestroyed() = 0;
|
|
|
| + protected:
|
| + ~AVDASurfaceAllocatorClient() {}
|
| +};
|
| +
|
| +class AVDACodecAllocatorClient {
|
| + public:
|
| // Called on the main thread when a new MediaCodec is configured.
|
| // |media_codec| will be null if configuration failed.
|
| virtual void OnCodecConfigured(
|
| + scoped_refptr<CodecConfig> codec_config,
|
| std::unique_ptr<VideoCodecBridge> media_codec) = 0;
|
|
|
| protected:
|
| @@ -126,13 +150,13 @@ class MEDIA_GPU_EXPORT AVDACodecAllocator {
|
| // Returns true if the caller now owns the surface, or false if someone else
|
| // owns the surface. |client| will be notified when the surface is available
|
| // via OnSurfaceAvailable().
|
| - bool AllocateSurface(AVDACodecAllocatorClient* client, int surface_id);
|
| + bool AllocateSurface(AVDASurfaceAllocatorClient* client, int surface_id);
|
|
|
| // Relinquish ownership of the surface or stop waiting for it to be available.
|
| // The caller must guarantee that when calling this the surface is either no
|
| // longer attached to a MediaCodec, or the MediaCodec it was attached to is
|
| // was released with ReleaseMediaCodec().
|
| - void DeallocateSurface(AVDACodecAllocatorClient* client, int surface_id);
|
| + void DeallocateSurface(AVDASurfaceAllocatorClient* client, int surface_id);
|
|
|
| // Create and configure a MediaCodec synchronously.
|
| std::unique_ptr<VideoCodecBridge> CreateMediaCodecSync(
|
| @@ -180,8 +204,8 @@ class MEDIA_GPU_EXPORT AVDACodecAllocator {
|
| friend class AVDACodecAllocatorTest;
|
|
|
| struct OwnerRecord {
|
| - AVDACodecAllocatorClient* owner = nullptr;
|
| - AVDACodecAllocatorClient* waiter = nullptr;
|
| + AVDASurfaceAllocatorClient* owner = nullptr;
|
| + AVDASurfaceAllocatorClient* waiter = nullptr;
|
| };
|
|
|
| class HangDetector : public base::MessageLoop::TaskObserver {
|
|
|