| OLD | NEW |
| 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 CONTENT_COMMON_GPU_MEDIA_V4L2_VIDEO_ENCODE_ACCELERATOR_H_ | 5 #ifndef CONTENT_COMMON_GPU_MEDIA_V4L2_VIDEO_ENCODE_ACCELERATOR_H_ |
| 6 #define CONTENT_COMMON_GPU_MEDIA_V4L2_VIDEO_ENCODE_ACCELERATOR_H_ | 6 #define CONTENT_COMMON_GPU_MEDIA_V4L2_VIDEO_ENCODE_ACCELERATOR_H_ |
| 7 | 7 |
| 8 #include <linux/videodev2.h> | 8 #include <linux/videodev2.h> |
| 9 #include <list> | 9 #include <list> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/memory/linked_ptr.h" | 12 #include "base/memory/linked_ptr.h" |
| 13 #include "base/memory/weak_ptr.h" | 13 #include "base/memory/weak_ptr.h" |
| 14 #include "base/threading/thread.h" | 14 #include "base/threading/thread.h" |
| 15 #include "content/common/content_export.h" | 15 #include "content/common/content_export.h" |
| 16 #include "content/common/gpu/media/v4l2_device.h" | 16 #include "content/common/gpu/media/v4l2_device.h" |
| 17 #include "content/common/gpu/media/v4l2_image_processor.h" | 17 #include "content/common/gpu/media/v4l2_image_processor.h" |
| 18 #include "media/video/video_encode_accelerator.h" | 18 #include "media/video/video_encode_accelerator.h" |
| 19 #include "ui/gfx/geometry/size.h" | 19 #include "ui/gfx/geometry/size.h" |
| 20 | 20 |
| 21 namespace base { |
| 22 |
| 23 class MessageLoopProxy; |
| 24 |
| 25 } // namespace base |
| 26 |
| 21 namespace media { | 27 namespace media { |
| 22 | 28 |
| 23 class BitstreamBuffer; | 29 class BitstreamBuffer; |
| 24 | 30 |
| 25 } // namespace media | 31 } // namespace media |
| 26 | 32 |
| 27 namespace content { | 33 namespace content { |
| 28 | 34 |
| 29 // This class handles video encode acceleration by interfacing with a V4L2 | 35 // This class handles video encode acceleration by interfacing with a V4L2 |
| 30 // device exposed by the codec hardware driver. The threading model of this | 36 // device exposed by the codec hardware driver. The threading model of this |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 bool CreateInputBuffers(); | 185 bool CreateInputBuffers(); |
| 180 bool CreateOutputBuffers(); | 186 bool CreateOutputBuffers(); |
| 181 | 187 |
| 182 // Destroy these buffers. | 188 // Destroy these buffers. |
| 183 void DestroyInputBuffers(); | 189 void DestroyInputBuffers(); |
| 184 void DestroyOutputBuffers(); | 190 void DestroyOutputBuffers(); |
| 185 | 191 |
| 186 // Set controls in |ctrls| and return true if successful. | 192 // Set controls in |ctrls| and return true if successful. |
| 187 bool SetExtCtrls(std::vector<struct v4l2_ext_control> ctrls); | 193 bool SetExtCtrls(std::vector<struct v4l2_ext_control> ctrls); |
| 188 | 194 |
| 189 // Our original calling task runner for the child thread. | 195 // Our original calling message loop for the child thread. |
| 190 const scoped_refptr<base::SingleThreadTaskRunner> child_task_runner_; | 196 const scoped_refptr<base::MessageLoopProxy> child_message_loop_proxy_; |
| 191 | 197 |
| 192 gfx::Size visible_size_; | 198 gfx::Size visible_size_; |
| 193 // Input allocated size required by the device. | 199 // Input allocated size required by the device. |
| 194 gfx::Size input_allocated_size_; | 200 gfx::Size input_allocated_size_; |
| 195 size_t output_buffer_byte_size_; | 201 size_t output_buffer_byte_size_; |
| 196 | 202 |
| 197 // Formats for input frames and the output stream. | 203 // Formats for input frames and the output stream. |
| 198 media::VideoFrame::Format device_input_format_; | 204 media::VideoFrame::Format device_input_format_; |
| 199 size_t input_planes_count_; | 205 size_t input_planes_count_; |
| 200 uint32 output_format_fourcc_; | 206 uint32 output_format_fourcc_; |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 // This thread services tasks posted from the VEA API entry points by the | 255 // This thread services tasks posted from the VEA API entry points by the |
| 250 // child thread and device service callbacks posted from the device thread. | 256 // child thread and device service callbacks posted from the device thread. |
| 251 base::Thread encoder_thread_; | 257 base::Thread encoder_thread_; |
| 252 | 258 |
| 253 // The device polling thread handles notifications of V4L2 device changes. | 259 // The device polling thread handles notifications of V4L2 device changes. |
| 254 // TODO(sheu): replace this thread with an TYPE_IO encoder_thread_. | 260 // TODO(sheu): replace this thread with an TYPE_IO encoder_thread_. |
| 255 base::Thread device_poll_thread_; | 261 base::Thread device_poll_thread_; |
| 256 | 262 |
| 257 // To expose client callbacks from VideoEncodeAccelerator. | 263 // To expose client callbacks from VideoEncodeAccelerator. |
| 258 // NOTE: all calls to these objects *MUST* be executed on | 264 // NOTE: all calls to these objects *MUST* be executed on |
| 259 // child_task_runner_. | 265 // child_message_loop_proxy_. |
| 260 base::WeakPtr<Client> client_; | 266 base::WeakPtr<Client> client_; |
| 261 scoped_ptr<base::WeakPtrFactory<Client> > client_ptr_factory_; | 267 scoped_ptr<base::WeakPtrFactory<Client> > client_ptr_factory_; |
| 262 | 268 |
| 263 // WeakPtr<> pointing to |this| for use in posting tasks from the | 269 // WeakPtr<> pointing to |this| for use in posting tasks from the |
| 264 // image_processor_ back to the child thread. | 270 // image_processor_ back to the child thread. |
| 265 // Tasks posted onto encoder and poll threads can use base::Unretained(this), | 271 // Tasks posted onto encoder and poll threads can use base::Unretained(this), |
| 266 // as both threads will not outlive this object. | 272 // as both threads will not outlive this object. |
| 267 base::WeakPtr<V4L2VideoEncodeAccelerator> weak_this_; | 273 base::WeakPtr<V4L2VideoEncodeAccelerator> weak_this_; |
| 268 base::WeakPtrFactory<V4L2VideoEncodeAccelerator> weak_this_ptr_factory_; | 274 base::WeakPtrFactory<V4L2VideoEncodeAccelerator> weak_this_ptr_factory_; |
| 269 | 275 |
| 270 DISALLOW_COPY_AND_ASSIGN(V4L2VideoEncodeAccelerator); | 276 DISALLOW_COPY_AND_ASSIGN(V4L2VideoEncodeAccelerator); |
| 271 }; | 277 }; |
| 272 | 278 |
| 273 } // namespace content | 279 } // namespace content |
| 274 | 280 |
| 275 #endif // CONTENT_COMMON_GPU_MEDIA_V4L2_VIDEO_ENCODE_ACCELERATOR_H_ | 281 #endif // CONTENT_COMMON_GPU_MEDIA_V4L2_VIDEO_ENCODE_ACCELERATOR_H_ |
| OLD | NEW |