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

Side by Side Diff: content/common/gpu/media/v4l2_slice_video_decode_accelerator.h

Issue 1839193003: Reland: Introduce GpuVideoDecodeAcceleratorFactory. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 CONTENT_COMMON_GPU_MEDIA_V4L2_SLICE_VIDEO_DECODE_ACCELERATOR_H_ 5 #ifndef CONTENT_COMMON_GPU_MEDIA_V4L2_SLICE_VIDEO_DECODE_ACCELERATOR_H_
6 #define CONTENT_COMMON_GPU_MEDIA_V4L2_SLICE_VIDEO_DECODE_ACCELERATOR_H_ 6 #define CONTENT_COMMON_GPU_MEDIA_V4L2_SLICE_VIDEO_DECODE_ACCELERATOR_H_
7 7
8 #include <linux/videodev2.h> 8 #include <linux/videodev2.h>
9 #include <stddef.h> 9 #include <stddef.h>
10 #include <stdint.h> 10 #include <stdint.h>
11 #include <queue> 11 #include <queue>
12 #include <vector> 12 #include <vector>
13 13
14 #include "base/macros.h" 14 #include "base/macros.h"
15 #include "base/memory/linked_ptr.h" 15 #include "base/memory/linked_ptr.h"
16 #include "base/memory/ref_counted.h" 16 #include "base/memory/ref_counted.h"
17 #include "base/memory/scoped_ptr.h" 17 #include "base/memory/scoped_ptr.h"
18 #include "base/memory/weak_ptr.h" 18 #include "base/memory/weak_ptr.h"
19 #include "base/synchronization/waitable_event.h" 19 #include "base/synchronization/waitable_event.h"
20 #include "base/threading/thread.h" 20 #include "base/threading/thread.h"
21 #include "content/common/content_export.h" 21 #include "content/common/content_export.h"
22 #include "content/common/gpu/media/gpu_video_decode_accelerator_helpers.h"
22 #include "content/common/gpu/media/h264_decoder.h" 23 #include "content/common/gpu/media/h264_decoder.h"
23 #include "content/common/gpu/media/v4l2_device.h" 24 #include "content/common/gpu/media/v4l2_device.h"
24 #include "content/common/gpu/media/vp8_decoder.h" 25 #include "content/common/gpu/media/vp8_decoder.h"
25 #include "media/video/video_decode_accelerator.h" 26 #include "media/video/video_decode_accelerator.h"
26 27
27 namespace content { 28 namespace content {
28 29
29 // An implementation of VideoDecodeAccelerator that utilizes the V4L2 slice 30 // An implementation of VideoDecodeAccelerator that utilizes the V4L2 slice
30 // level codec API for decoding. The slice level API provides only a low-level 31 // level codec API for decoding. The slice level API provides only a low-level
31 // decoding functionality and requires userspace to provide support for parsing 32 // decoding functionality and requires userspace to provide support for parsing
32 // the input stream and managing decoder state across frames. 33 // the input stream and managing decoder state across frames.
33 class CONTENT_EXPORT V4L2SliceVideoDecodeAccelerator 34 class CONTENT_EXPORT V4L2SliceVideoDecodeAccelerator
34 : public media::VideoDecodeAccelerator { 35 : public media::VideoDecodeAccelerator {
35 public: 36 public:
36 class V4L2DecodeSurface; 37 class V4L2DecodeSurface;
37 38
38 V4L2SliceVideoDecodeAccelerator( 39 V4L2SliceVideoDecodeAccelerator(
39 const scoped_refptr<V4L2Device>& device, 40 const scoped_refptr<V4L2Device>& device,
40 EGLDisplay egl_display, 41 EGLDisplay egl_display,
41 EGLContext egl_context, 42 const GetGLContextCallback& get_gl_context_cb,
42 const base::WeakPtr<Client>& io_client_, 43 const MakeGLContextCurrentCallback& make_context_current_cb);
43 const base::Callback<bool(void)>& make_context_current,
44 const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner);
45 ~V4L2SliceVideoDecodeAccelerator() override; 44 ~V4L2SliceVideoDecodeAccelerator() override;
46 45
47 // media::VideoDecodeAccelerator implementation. 46 // media::VideoDecodeAccelerator implementation.
48 bool Initialize(const Config& config, Client* client) override; 47 bool Initialize(const Config& config, Client* client) override;
49 void Decode(const media::BitstreamBuffer& bitstream_buffer) override; 48 void Decode(const media::BitstreamBuffer& bitstream_buffer) override;
50 void AssignPictureBuffers( 49 void AssignPictureBuffers(
51 const std::vector<media::PictureBuffer>& buffers) override; 50 const std::vector<media::PictureBuffer>& buffers) override;
52 void ReusePictureBuffer(int32_t picture_buffer_id) override; 51 void ReusePictureBuffer(int32_t picture_buffer_id) override;
53 void Flush() override; 52 void Flush() override;
54 void Reset() override; 53 void Reset() override;
55 void Destroy() override; 54 void Destroy() override;
56 bool CanDecodeOnIOThread() override; 55 bool TryToSetupDecodeOnSeparateThread(
56 const base::WeakPtr<Client>& decode_client,
57 const scoped_refptr<base::SingleThreadTaskRunner>& decode_task_runner)
58 override;
57 59
58 static media::VideoDecodeAccelerator::SupportedProfiles 60 static media::VideoDecodeAccelerator::SupportedProfiles
59 GetSupportedProfiles(); 61 GetSupportedProfiles();
60 62
61 private: 63 private:
62 class V4L2H264Accelerator; 64 class V4L2H264Accelerator;
63 class V4L2VP8Accelerator; 65 class V4L2VP8Accelerator;
64 66
65 // Record for input buffers. 67 // Record for input buffers.
66 struct InputRecord { 68 struct InputRecord {
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 298
297 // Callback that indicates a picture has been cleared. 299 // Callback that indicates a picture has been cleared.
298 void PictureCleared(); 300 void PictureCleared();
299 301
300 size_t input_planes_count_; 302 size_t input_planes_count_;
301 size_t output_planes_count_; 303 size_t output_planes_count_;
302 304
303 // GPU Child thread task runner. 305 // GPU Child thread task runner.
304 const scoped_refptr<base::SingleThreadTaskRunner> child_task_runner_; 306 const scoped_refptr<base::SingleThreadTaskRunner> child_task_runner_;
305 307
306 // IO thread task runner. 308 // Task runner Decode() and PictureReady() run on.
307 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; 309 scoped_refptr<base::SingleThreadTaskRunner> decode_task_runner_;
308 310
309 // WeakPtr<> pointing to |this| for use in posting tasks from the decoder or 311 // WeakPtr<> pointing to |this| for use in posting tasks from the decoder or
310 // device worker threads back to the child thread. 312 // device worker threads back to the child thread.
311 base::WeakPtr<V4L2SliceVideoDecodeAccelerator> weak_this_; 313 base::WeakPtr<V4L2SliceVideoDecodeAccelerator> weak_this_;
312 314
313 // To expose client callbacks from VideoDecodeAccelerator. 315 // To expose client callbacks from VideoDecodeAccelerator.
314 // NOTE: all calls to these objects *MUST* be executed on 316 // NOTE: all calls to these objects *MUST* be executed on
315 // child_task_runner_. 317 // child_task_runner_.
316 scoped_ptr<base::WeakPtrFactory<VideoDecodeAccelerator::Client>> 318 scoped_ptr<base::WeakPtrFactory<VideoDecodeAccelerator::Client>>
317 client_ptr_factory_; 319 client_ptr_factory_;
318 base::WeakPtr<VideoDecodeAccelerator::Client> client_; 320 base::WeakPtr<VideoDecodeAccelerator::Client> client_;
319 // Callbacks to |io_client_| must be executed on |io_task_runner_|. 321 // Callbacks to |decode_client_| must be executed on |decode_task_runner_|.
320 base::WeakPtr<Client> io_client_; 322 base::WeakPtr<Client> decode_client_;
321 323
322 // V4L2 device in use. 324 // V4L2 device in use.
323 scoped_refptr<V4L2Device> device_; 325 scoped_refptr<V4L2Device> device_;
324 326
325 // Thread to communicate with the device on. 327 // Thread to communicate with the device on.
326 base::Thread decoder_thread_; 328 base::Thread decoder_thread_;
327 scoped_refptr<base::SingleThreadTaskRunner> decoder_thread_task_runner_; 329 scoped_refptr<base::SingleThreadTaskRunner> decoder_thread_task_runner_;
328 330
329 // Thread used to poll the device for events. 331 // Thread used to poll the device for events.
330 base::Thread device_poll_thread_; 332 base::Thread device_poll_thread_;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 V4L2DecodeSurfaceByPictureBufferId surfaces_at_display_; 393 V4L2DecodeSurfaceByPictureBufferId surfaces_at_display_;
392 394
393 // Record for decoded pictures that can be sent to PictureReady. 395 // Record for decoded pictures that can be sent to PictureReady.
394 struct PictureRecord; 396 struct PictureRecord;
395 // Pictures that are ready but not sent to PictureReady yet. 397 // Pictures that are ready but not sent to PictureReady yet.
396 std::queue<PictureRecord> pending_picture_ready_; 398 std::queue<PictureRecord> pending_picture_ready_;
397 399
398 // The number of pictures that are sent to PictureReady and will be cleared. 400 // The number of pictures that are sent to PictureReady and will be cleared.
399 int picture_clearing_count_; 401 int picture_clearing_count_;
400 402
401 // Make the GL context current callback.
402 base::Callback<bool(void)> make_context_current_;
403
404 // EGL state 403 // EGL state
405 EGLDisplay egl_display_; 404 EGLDisplay egl_display_;
406 EGLContext egl_context_; 405
406 // Callback to get current GLContext.
407 GetGLContextCallback get_gl_context_cb_;
408 // Callback to set the correct gl context.
409 MakeGLContextCurrentCallback make_context_current_cb_;
407 410
408 // The WeakPtrFactory for |weak_this_|. 411 // The WeakPtrFactory for |weak_this_|.
409 base::WeakPtrFactory<V4L2SliceVideoDecodeAccelerator> weak_this_factory_; 412 base::WeakPtrFactory<V4L2SliceVideoDecodeAccelerator> weak_this_factory_;
410 413
411 DISALLOW_COPY_AND_ASSIGN(V4L2SliceVideoDecodeAccelerator); 414 DISALLOW_COPY_AND_ASSIGN(V4L2SliceVideoDecodeAccelerator);
412 }; 415 };
413 416
414 class V4L2H264Picture; 417 class V4L2H264Picture;
415 class V4L2VP8Picture; 418 class V4L2VP8Picture;
416 419
417 } // namespace content 420 } // namespace content
418 421
419 #endif // CONTENT_COMMON_GPU_MEDIA_V4L2_SLICE_VIDEO_DECODE_ACCELERATOR_H_ 422 #endif // CONTENT_COMMON_GPU_MEDIA_V4L2_SLICE_VIDEO_DECODE_ACCELERATOR_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698