Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(349)

Side by Side Diff: media/gpu/avda_surface_bundle.h

Issue 2813303003: Add AndroidVideoSurfaceChooser to manage overlays. (Closed)
Patch Set: OnOverlayTransition => OnSurfaceTransition Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef MEDIA_GPU_AVDA_SURFACE_BUNDLE_H_ 5 #ifndef MEDIA_GPU_AVDA_SURFACE_BUNDLE_H_
6 #define MEDIA_GPU_AVDA_SURFACE_BUNDLE_H_ 6 #define MEDIA_GPU_AVDA_SURFACE_BUNDLE_H_
7 7
8 #include "base/memory/ref_counted.h" 8 #include "base/memory/ref_counted.h"
9 #include "media/base/android/android_overlay.h" 9 #include "media/base/android/android_overlay.h"
10 #include "media/base/surface_manager.h" 10 #include "media/base/surface_manager.h"
11 #include "media/gpu/media_gpu_export.h"
11 #include "ui/gl/android/scoped_java_surface.h" 12 #include "ui/gl/android/scoped_java_surface.h"
12 #include "ui/gl/android/surface_texture.h" 13 #include "ui/gl/android/surface_texture.h"
13 14
14 namespace media { 15 namespace media {
15 16
16 // AVDASurfaceBundle is a collection of everything that the producer-side of 17 // AVDASurfaceBundle is a collection of everything that the producer-side of
17 // the output surface needs. In other words, it's the surface, and any 18 // the output surface needs. In other words, it's the surface, and any
18 // SurfaceTexture that backs it. The SurfaceTexture isn't needed directly by 19 // SurfaceTexture that backs it. The SurfaceTexture isn't needed directly by
19 // the producer, but destroying it causes the surface not to work. 20 // the producer, but destroying it causes the surface not to work.
20 // 21 //
21 // The idea is that a reference to this should be kept with the codec, even if 22 // The idea is that a reference to this should be kept with the codec, even if
22 // the codec is sent to another thread. This will prevent the output surface 23 // the codec is sent to another thread. This will prevent the output surface
23 // from being destroyed while the codec depends on it. 24 // from being destroyed while the codec depends on it.
24 // While you may send a reference to this to other threads, be sure that it 25 // While you may send a reference to this to other threads, be sure that it
25 // doesn't drop the reference there without creating another one. This has to 26 // doesn't drop the reference there without creating another one. This has to
26 // be destroyed on the gpu main thread. 27 // be destroyed on the gpu main thread.
27 class AVDASurfaceBundle : public base::RefCountedThreadSafe<AVDASurfaceBundle> { 28 class MEDIA_GPU_EXPORT AVDASurfaceBundle
29 : public base::RefCountedThreadSafe<AVDASurfaceBundle> {
28 public: 30 public:
29 explicit AVDASurfaceBundle(int surface_id); 31 // |overlay| is the overlay that we'll use, or nullptr for SurfaceTexture.
32 explicit AVDASurfaceBundle(std::unique_ptr<AndroidOverlay> overlay);
30 33
31 // The surface that MediaCodec is configured to output to. This can be either 34 // The surface that MediaCodec is configured to output to. This can be either
32 // a SurfaceTexture or other Surface provider. 35 // a SurfaceTexture or other Surface provider.
33 // TODO(liberato): it would be nice if we had an abstraction that included 36 // TODO(liberato): it would be nice if we had an abstraction that included
34 // SurfaceTexture and Overlay, but we don't right now. 37 // SurfaceTexture and Overlay, but we don't right now.
35 const base::android::JavaRef<jobject>& j_surface() const { 38 const base::android::JavaRef<jobject>& j_surface() const {
36 if (overlay) 39 if (overlay)
37 return overlay->GetJavaSurface(); 40 return overlay->GetJavaSurface();
38 else 41 else
39 return surface_texture_surface.j_surface(); 42 return surface_texture_surface.j_surface();
40 } 43 }
41 44
42 int surface_id = SurfaceManager::kNoSurfaceID; 45 // If |overlay| is non-null, then |overlay| owns j_surface().
43
44 // The surface onto which the codec is writing.
45 // TODO(liberato): this isn't true if we have an overlay. the overlay keeps
46 // the java surface.
47 // gl::ScopedJavaSurface surface;
48
49 // If |overlay| is non-null, then |overlay| owns |surface|.
50 std::unique_ptr<AndroidOverlay> overlay; 46 std::unique_ptr<AndroidOverlay> overlay;
DaleCurtis 2017/04/27 22:01:11 These should have accessors and be private members
liberato (no reviews please) 2017/04/27 23:17:05 Done, struct.
51 47
52 // The SurfaceTexture attached to |surface|, or nullptr if |surface| is 48 // The SurfaceTexture attached to |surface()|, or nullptr if j_surface() is
53 // SurfaceView backed. 49 // SurfaceView backed.
54 scoped_refptr<gl::SurfaceTexture> surface_texture; 50 scoped_refptr<gl::SurfaceTexture> surface_texture;
55 51
56 // If |surface_texture| is not null, then this is the surface for it. 52 // If |surface_texture| is not null, then this is the surface for it.
57 // TODO(liberato): |surface| is the same thing, since overlays own their own
58 // surfaces anyway.
59 gl::ScopedJavaSurface surface_texture_surface; 53 gl::ScopedJavaSurface surface_texture_surface;
60 54
61 private: 55 private:
62 ~AVDASurfaceBundle(); 56 ~AVDASurfaceBundle();
63 friend class base::RefCountedThreadSafe<AVDASurfaceBundle>; 57 friend class base::RefCountedThreadSafe<AVDASurfaceBundle>;
64 58
65 DISALLOW_COPY_AND_ASSIGN(AVDASurfaceBundle); 59 DISALLOW_COPY_AND_ASSIGN(AVDASurfaceBundle);
66 }; 60 };
67 61
68 } // namespace media 62 } // namespace media
69 63
70 #endif // MEDIA_GPU_AVDA_SURFACE_BUNDLE_H_ 64 #endif // MEDIA_GPU_AVDA_SURFACE_BUNDLE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698