Chromium Code Reviews| Index: content/common/gpu/media/vt_video_decode_accelerator.h |
| diff --git a/content/common/gpu/media/vt_video_decode_accelerator.h b/content/common/gpu/media/vt_video_decode_accelerator.h |
| index 5beffb2313abba1c7de1f0b4abc394c19bd208e4..226d37d823857a13c16dc836c2dffd6677fc93e2 100644 |
| --- a/content/common/gpu/media/vt_video_decode_accelerator.h |
| +++ b/content/common/gpu/media/vt_video_decode_accelerator.h |
| @@ -16,6 +16,7 @@ |
| #include "base/message_loop/message_loop.h" |
| #include "base/threading/thread.h" |
| #include "base/threading/thread_checker.h" |
| +#include "content/common/gpu/media/h264_dpb.h" |
| #include "content/common/gpu/media/vt.h" |
| #include "media/filters/h264_parser.h" |
| #include "media/video/video_decode_accelerator.h" |
| @@ -73,9 +74,11 @@ class VTVideoDecodeAccelerator : public media::VideoDecodeAccelerator { |
| ~Frame(); |
| int32_t bitstream_id; |
| - base::ScopedCFTypeRef<CVImageBufferRef> image; |
| + // TODO(sandersd): Reorder window size. |
| + int32_t pic_order_cnt; |
|
DaleCurtis
2014/11/14 21:11:45
Needs docs. It'd be nice for all of them too.
sandersd (OOO until July 31)
2014/11/14 21:28:52
Done.
|
| // TODO(sandersd): visible_rect. |
| gfx::Size coded_size; |
| + base::ScopedCFTypeRef<CVImageBufferRef> image; |
| }; |
| struct Task { |
| @@ -89,6 +92,7 @@ class VTVideoDecodeAccelerator : public media::VideoDecodeAccelerator { |
| // |
| // Methods for interacting with VideoToolbox. Run on |decoder_thread_|. |
| // |
| + |
| // Set up VideoToolbox using the current SPS and PPS. Returns true or calls |
| // NotifyError() before returning false. |
| bool ConfigureDecoder(); |
| @@ -112,12 +116,14 @@ class VTVideoDecodeAccelerator : public media::VideoDecodeAccelerator { |
| void FlushTask(TaskType type); |
| void FlushDone(TaskType type); |
| - // Attempt to make progress on |pending_tasks_|. |
| - void ProcessTasks(); |
| + // Try to make progress on tasks in the |task_queue_| or sending frame in the |
| + // |reorder_queue_|. |
| + void ProcessWorkQueues(); |
| // These methods returns true if the task was completed, false if it couldn't |
| // be completed yet. |
| - bool ProcessTask(const Task& task); |
| + bool ProcessTaskQueue(); |
| + bool ProcessReorderQueue(); |
| bool ProcessFrame(const Frame& frame); |
| bool SendFrame(const Frame& frame); |
| @@ -134,7 +140,19 @@ class VTVideoDecodeAccelerator : public media::VideoDecodeAccelerator { |
| std::queue<TaskType> pending_flush_tasks_; |
| // Queue of tasks to complete in the GPU thread. |
| - std::queue<Task> pending_tasks_; |
| + std::queue<Task> task_queue_; |
| + |
| + // Utility class to define the order of frames in the reorder queue. |
| + struct FrameOrder { |
| + bool operator()( |
| + const linked_ptr<Frame>& lhs, |
| + const linked_ptr<Frame>& rhs) const; |
| + }; |
| + |
| + // Queue of decoded frames in presentation order. |
| + std::priority_queue<linked_ptr<Frame>, |
| + std::vector<linked_ptr<Frame>>, |
| + FrameOrder> reorder_queue_; |
| // Size of assigned picture buffers. |
| gfx::Size picture_size_; |
| @@ -169,8 +187,10 @@ class VTVideoDecodeAccelerator : public media::VideoDecodeAccelerator { |
| media::H264Parser parser_; |
| gfx::Size coded_size_; |
| + int last_sps_id_; |
| std::vector<uint8_t> last_sps_; |
| std::vector<uint8_t> last_spsext_; |
| + int last_pps_id_; |
| std::vector<uint8_t> last_pps_; |
| // |