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

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

Issue 2191263002: V4L2VideoDecodeAccelerator: support external buffer import (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: small improvement Created 4 years, 2 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
« no previous file with comments | « no previous file | media/gpu/v4l2_image_processor.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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_V4L2_IMAGE_PROCESSOR_H_ 5 #ifndef MEDIA_GPU_V4L2_IMAGE_PROCESSOR_H_
6 #define MEDIA_GPU_V4L2_IMAGE_PROCESSOR_H_ 6 #define MEDIA_GPU_V4L2_IMAGE_PROCESSOR_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 23 matching lines...) Expand all
34 // Initializes the processor to convert from |input_format| to |output_format| 34 // Initializes the processor to convert from |input_format| to |output_format|
35 // and/or scale from |input_visible_size| to |output_visible_size|. 35 // and/or scale from |input_visible_size| to |output_visible_size|.
36 // Request the input buffers to be of at least |input_allocated_size| and the 36 // Request the input buffers to be of at least |input_allocated_size| and the
37 // output buffers to be of at least |output_allocated_size|. The number of 37 // output buffers to be of at least |output_allocated_size|. The number of
38 // input buffers and output buffers will be |num_buffers|. Provided |error_cb| 38 // input buffers and output buffers will be |num_buffers|. Provided |error_cb|
39 // will be called if an error occurs. Return true if the requested 39 // will be called if an error occurs. Return true if the requested
40 // configuration is supported. 40 // configuration is supported.
41 bool Initialize(VideoPixelFormat input_format, 41 bool Initialize(VideoPixelFormat input_format,
42 VideoPixelFormat output_format, 42 VideoPixelFormat output_format,
43 v4l2_memory input_memory_type, 43 v4l2_memory input_memory_type,
44 v4l2_memory output_memory_type,
44 gfx::Size input_visible_size, 45 gfx::Size input_visible_size,
45 gfx::Size input_allocated_size, 46 gfx::Size input_allocated_size,
46 gfx::Size output_visible_size, 47 gfx::Size output_visible_size,
47 gfx::Size output_allocated_size, 48 gfx::Size output_allocated_size,
48 int num_buffers, 49 int num_buffers,
49 const base::Closure& error_cb); 50 const base::Closure& error_cb);
50 51
51 // Returns a vector of dmabuf file descriptors, exported for V4L2 output 52 // Returns a vector of dmabuf file descriptors, exported for V4L2 output
52 // buffer with |index|. The size of vector will be the number of planes of the 53 // buffer with |index|. The size of vector will be the number of planes of the
53 // buffer. Return an empty vector on failure. 54 // buffer. Return an empty vector on failure.
(...skipping 23 matching lines...) Expand all
77 gfx::Size output_allocated_size() const { return output_allocated_size_; } 78 gfx::Size output_allocated_size() const { return output_allocated_size_; }
78 79
79 // Callback to be used to return the index of a processed image to the 80 // Callback to be used to return the index of a processed image to the
80 // client. After the client is done with the frame, call Process with the 81 // client. After the client is done with the frame, call Process with the
81 // index to return the output buffer to the image processor. 82 // index to return the output buffer to the image processor.
82 typedef base::Callback<void(int output_buffer_index)> FrameReadyCB; 83 typedef base::Callback<void(int output_buffer_index)> FrameReadyCB;
83 84
84 // Called by client to process |frame|. The resulting processed frame will be 85 // Called by client to process |frame|. The resulting processed frame will be
85 // stored in |output_buffer_index| output buffer and notified via |cb|. The 86 // stored in |output_buffer_index| output buffer and notified via |cb|. The
86 // processor will drop all its references to |frame| after it finishes 87 // processor will drop all its references to |frame| after it finishes
87 // accessing it. 88 // accessing it. If |output_memory_type_| is V4L2_MEMORY_DMABUF, the caller
88 void Process(const scoped_refptr<VideoFrame>& frame, 89 // should pass non-empty |output_dmabuf_fds| and the processed frame will be
90 // stored in those buffers. If the number of |output_dmabuf_fds| is not
91 // expected, this function will return false.
92 bool Process(const scoped_refptr<VideoFrame>& frame,
89 int output_buffer_index, 93 int output_buffer_index,
94 std::vector<base::ScopedFD> output_dmabuf_fds,
90 const FrameReadyCB& cb); 95 const FrameReadyCB& cb);
91 96
92 // Reset all processing frames. After this method returns, no more callbacks 97 // Reset all processing frames. After this method returns, no more callbacks
93 // will be invoked. V4L2ImageProcessor is ready to process more frames. 98 // will be invoked. V4L2ImageProcessor is ready to process more frames.
94 bool Reset(); 99 bool Reset();
95 100
96 // Stop all processing and clean up. After this method returns no more 101 // Stop all processing and clean up. After this method returns no more
97 // callbacks will be invoked. Deletes |this| unconditionally, so make sure 102 // callbacks will be invoked. Deletes |this| unconditionally, so make sure
98 // to drop all pointers to it! 103 // to drop all pointers to it!
99 void Destroy(); 104 void Destroy();
100 105
101 private: 106 private:
102 // Record for input buffers. 107 // Record for input buffers.
103 struct InputRecord { 108 struct InputRecord {
104 InputRecord(); 109 InputRecord();
105 ~InputRecord(); 110 ~InputRecord();
106 scoped_refptr<VideoFrame> frame; 111 scoped_refptr<VideoFrame> frame;
107 bool at_device; 112 bool at_device;
108 }; 113 };
109 114
110 // Record for output buffers. 115 // Record for output buffers.
111 struct OutputRecord { 116 struct OutputRecord {
112 OutputRecord(); 117 OutputRecord();
118 OutputRecord(OutputRecord&&) = default;
113 ~OutputRecord(); 119 ~OutputRecord();
114 bool at_device; 120 bool at_device;
121 // The processed frame will be stored in these buffers if
122 // |output_memory_type_| is V4L2_MEMORY_DMABUF
123 std::vector<base::ScopedFD> dmabuf_fds;
115 }; 124 };
116 125
117 // Job record. Jobs are processed in a FIFO order. This is separate from 126 // Job record. Jobs are processed in a FIFO order. This is separate from
118 // InputRecord, because an InputRecord may be returned before we dequeue 127 // InputRecord, because an InputRecord may be returned before we dequeue
119 // the corresponding output buffer. The processed frame will be stored in 128 // the corresponding output buffer. The processed frame will be stored in
120 // |output_buffer_index| output buffer. 129 // |output_buffer_index| output buffer. If |output_memory_type_| is
130 // V4L2_MEMORY_DMABUF, the processed frame will be stored in
131 // |output_dmabuf_fds|.
121 struct JobRecord { 132 struct JobRecord {
122 JobRecord(); 133 JobRecord();
123 ~JobRecord(); 134 ~JobRecord();
124 scoped_refptr<VideoFrame> frame; 135 scoped_refptr<VideoFrame> frame;
125 int output_buffer_index; 136 int output_buffer_index;
137 std::vector<base::ScopedFD> output_dmabuf_fds;
126 FrameReadyCB ready_cb; 138 FrameReadyCB ready_cb;
127 }; 139 };
128 140
129 void EnqueueInput(); 141 void EnqueueInput();
130 void EnqueueOutput(int index); 142 void EnqueueOutput(int index);
131 void Dequeue(); 143 void Dequeue();
132 bool EnqueueInputRecord(); 144 bool EnqueueInputRecord();
133 bool EnqueueOutputRecord(int index); 145 bool EnqueueOutputRecord(int index);
134 bool CreateInputBuffers(); 146 bool CreateInputBuffers();
135 bool CreateOutputBuffers(); 147 bool CreateOutputBuffers();
(...skipping 21 matching lines...) Expand all
157 gfx::Size input_visible_size_; 169 gfx::Size input_visible_size_;
158 gfx::Size input_allocated_size_; 170 gfx::Size input_allocated_size_;
159 171
160 // The visible/allocated sizes of the destination frame. 172 // The visible/allocated sizes of the destination frame.
161 gfx::Size output_visible_size_; 173 gfx::Size output_visible_size_;
162 gfx::Size output_allocated_size_; 174 gfx::Size output_allocated_size_;
163 175
164 VideoPixelFormat input_format_; 176 VideoPixelFormat input_format_;
165 VideoPixelFormat output_format_; 177 VideoPixelFormat output_format_;
166 v4l2_memory input_memory_type_; 178 v4l2_memory input_memory_type_;
179 v4l2_memory output_memory_type_;
167 uint32_t input_format_fourcc_; 180 uint32_t input_format_fourcc_;
168 uint32_t output_format_fourcc_; 181 uint32_t output_format_fourcc_;
169 182
170 size_t input_planes_count_; 183 size_t input_planes_count_;
171 size_t output_planes_count_; 184 size_t output_planes_count_;
172 185
173 // Our original calling task runner for the child thread. 186 // Our original calling task runner for the child thread.
174 const scoped_refptr<base::SingleThreadTaskRunner> child_task_runner_; 187 const scoped_refptr<base::SingleThreadTaskRunner> child_task_runner_;
175 188
176 // V4L2 device in use. 189 // V4L2 device in use.
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 230
218 // Weak factory for producing weak pointers on the child thread. 231 // Weak factory for producing weak pointers on the child thread.
219 base::WeakPtrFactory<V4L2ImageProcessor> weak_this_factory_; 232 base::WeakPtrFactory<V4L2ImageProcessor> weak_this_factory_;
220 233
221 DISALLOW_COPY_AND_ASSIGN(V4L2ImageProcessor); 234 DISALLOW_COPY_AND_ASSIGN(V4L2ImageProcessor);
222 }; 235 };
223 236
224 } // namespace media 237 } // namespace media
225 238
226 #endif // MEDIA_GPU_V4L2_IMAGE_PROCESSOR_H_ 239 #endif // MEDIA_GPU_V4L2_IMAGE_PROCESSOR_H_
OLDNEW
« no previous file with comments | « no previous file | media/gpu/v4l2_image_processor.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698