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

Side by Side Diff: chrome/gpu/gpu_arc_video_encode_accelerator.h

Issue 2892863002: ArcBridge: Add VideoEncodeAccelerator implementation. (Closed)
Patch Set: 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #ifndef CHROME_GPU_GPU_ARC_VIDEO_ENCODE_ACCELERATOR_H_
6 #define CHROME_GPU_GPU_ARC_VIDEO_ENCODE_ACCELERATOR_H_
7
8 #include <memory>
9 #include <vector>
10
11 #include "base/files/scoped_file.h"
12 #include "base/macros.h"
13 #include "components/arc/common/video_encode_accelerator.mojom.h"
14 #include "components/arc/video_accelerator/video_accelerator.h"
15 #include "gpu/command_buffer/service/gpu_preferences.h"
16 #include "media/video/video_encode_accelerator.h"
17
18 namespace chromeos {
19 namespace arc {
20
21 // GpuArcVideoEncodeAccelerator manages life-cycle and IPC message translation
Luis Héctor Chávez 2017/05/19 15:14:44 nit: lifecycle is much more common (472 instances)
22 // for ArcVideoAccelerator.
23 //
24 // For each creation request from GpuArcVideoEncodeAcceleratorHost,
25 // GpuArcVideoEncodeAccelerator will create a new IPC channel.
26 class GpuArcVideoEncodeAccelerator
27 : public ::arc::mojom::VideoEncodeAccelerator,
28 public media::VideoEncodeAccelerator::Client {
29 public:
30 explicit GpuArcVideoEncodeAccelerator(
31 const gpu::GpuPreferences& gpu_preferences);
32 ~GpuArcVideoEncodeAccelerator() override;
33
34 private:
35 using VideoPixelFormat = ::arc::mojom::VideoPixelFormat;
36 using VideoCodecProfile = ::arc::mojom::VideoCodecProfile;
37 using VideoEncodeClientPtr = ::arc::mojom::VideoEncodeClientPtr;
38 using Error = ::arc::mojom::VideoEncodeAccelerator::Error;
39
40 // VideoEncodeAccelerator::Client implementation.
41 void RequireBitstreamBuffers(unsigned int input_count,
42 const gfx::Size& input_coded_size,
43 size_t output_buffer_size) override;
44 void BitstreamBufferReady(int32_t bitstream_buffer_id,
45 size_t payload_size,
46 bool key_frame,
47 base::TimeDelta timestamp) override;
48 void NotifyError(media::VideoEncodeAccelerator::Error error) override;
49
50 // ::arc::mojom::VideoEncodeAccelerator implementation.
51 void GetSupportedProfiles(
52 const GetSupportedProfilesCallback& callback) override;
53
54 void Initialize(VideoPixelFormat input_format,
55 const gfx::Size& visible_size,
56 VideoEncodeAccelerator::StorageType input_storage,
57 VideoCodecProfile output_profile,
58 uint32_t initial_bitrate,
59 VideoEncodeClientPtr client,
60 const InitializeCallback& callback) override;
61
62 void Encode(mojo::ScopedHandle fd,
63 std::vector<::arc::VideoFramePlane> planes,
64 const gfx::Size& visible_size,
65 int64_t timestamp,
66 bool force_keyframe) override;
67
68 void UseOutputBitstreamBuffer(int32_t bitstream_buffer_id,
69 mojo::ScopedHandle shmem_fd,
70 uint32_t offset,
71 uint32_t size) override;
72
73 void RequestEncodingParametersChange(uint32_t bitrate,
74 uint32_t framerate) override;
75
76 base::ScopedFD UnwrapFdFromMojoHandle(mojo::ScopedHandle handle);
77
78 gpu::GpuPreferences gpu_preferences_;
79 std::unique_ptr<media::VideoEncodeAccelerator> accelerator_;
80 ::arc::mojom::VideoEncodeClientPtr client_;
81 gfx::Size input_coded_size_;
82 media::VideoPixelFormat input_pixel_format_;
83
84 DISALLOW_COPY_AND_ASSIGN(GpuArcVideoEncodeAccelerator);
85 };
86
87 } // namespace arc
88 } // namespace chromeos
89
90 #endif // CHROME_GPU_GPU_ARC_VIDEO_ENCODE_ACCELERATOR_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698