OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "media/gpu/vaapi_video_decode_accelerator.h" | 5 #include "media/gpu/vaapi_video_decode_accelerator.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
60 } while (0) | 60 } while (0) |
61 | 61 |
62 class VaapiVideoDecodeAccelerator::VaapiDecodeSurface | 62 class VaapiVideoDecodeAccelerator::VaapiDecodeSurface |
63 : public base::RefCountedThreadSafe<VaapiDecodeSurface> { | 63 : public base::RefCountedThreadSafe<VaapiDecodeSurface> { |
64 public: | 64 public: |
65 VaapiDecodeSurface(int32_t bitstream_id, | 65 VaapiDecodeSurface(int32_t bitstream_id, |
66 const scoped_refptr<VASurface>& va_surface); | 66 const scoped_refptr<VASurface>& va_surface); |
67 | 67 |
68 int32_t bitstream_id() const { return bitstream_id_; } | 68 int32_t bitstream_id() const { return bitstream_id_; } |
69 scoped_refptr<VASurface> va_surface() { return va_surface_; } | 69 scoped_refptr<VASurface> va_surface() { return va_surface_; } |
| 70 gfx::Rect visible_rect() const { return visible_rect_; } |
| 71 |
| 72 void SetVisibleRect(const gfx::Rect& visible_rect) { |
| 73 visible_rect_ = visible_rect; |
| 74 } |
70 | 75 |
71 private: | 76 private: |
72 friend class base::RefCountedThreadSafe<VaapiDecodeSurface>; | 77 friend class base::RefCountedThreadSafe<VaapiDecodeSurface>; |
73 ~VaapiDecodeSurface(); | 78 ~VaapiDecodeSurface(); |
74 | 79 |
75 int32_t bitstream_id_; | 80 int32_t bitstream_id_; |
76 scoped_refptr<VASurface> va_surface_; | 81 scoped_refptr<VASurface> va_surface_; |
| 82 gfx::Rect visible_rect_; |
77 }; | 83 }; |
78 | 84 |
79 VaapiVideoDecodeAccelerator::VaapiDecodeSurface::VaapiDecodeSurface( | 85 VaapiVideoDecodeAccelerator::VaapiDecodeSurface::VaapiDecodeSurface( |
80 int32_t bitstream_id, | 86 int32_t bitstream_id, |
81 const scoped_refptr<VASurface>& va_surface) | 87 const scoped_refptr<VASurface>& va_surface) |
82 : bitstream_id_(bitstream_id), va_surface_(va_surface) {} | 88 : bitstream_id_(bitstream_id), va_surface_(va_surface) {} |
83 | 89 |
84 VaapiVideoDecodeAccelerator::VaapiDecodeSurface::~VaapiDecodeSurface() {} | 90 VaapiVideoDecodeAccelerator::VaapiDecodeSurface::~VaapiDecodeSurface() {} |
85 | 91 |
86 class VaapiH264Picture : public H264Picture { | 92 class VaapiH264Picture : public H264Picture { |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 | 135 |
130 bool SubmitSlice(const H264PPS* pps, | 136 bool SubmitSlice(const H264PPS* pps, |
131 const H264SliceHeader* slice_hdr, | 137 const H264SliceHeader* slice_hdr, |
132 const H264Picture::Vector& ref_pic_list0, | 138 const H264Picture::Vector& ref_pic_list0, |
133 const H264Picture::Vector& ref_pic_list1, | 139 const H264Picture::Vector& ref_pic_list1, |
134 const scoped_refptr<H264Picture>& pic, | 140 const scoped_refptr<H264Picture>& pic, |
135 const uint8_t* data, | 141 const uint8_t* data, |
136 size_t size) override; | 142 size_t size) override; |
137 | 143 |
138 bool SubmitDecode(const scoped_refptr<H264Picture>& pic) override; | 144 bool SubmitDecode(const scoped_refptr<H264Picture>& pic) override; |
139 bool OutputPicture(const scoped_refptr<H264Picture>& pic) override; | 145 bool OutputPicture(const scoped_refptr<H264Picture>& pic, |
| 146 const gfx::Rect& visible_rect) override; |
140 | 147 |
141 void Reset() override; | 148 void Reset() override; |
142 | 149 |
143 private: | 150 private: |
144 scoped_refptr<VaapiDecodeSurface> H264PictureToVaapiDecodeSurface( | 151 scoped_refptr<VaapiDecodeSurface> H264PictureToVaapiDecodeSurface( |
145 const scoped_refptr<H264Picture>& pic); | 152 const scoped_refptr<H264Picture>& pic); |
146 | 153 |
147 void FillVAPicture(VAPictureH264* va_pic, scoped_refptr<H264Picture> pic); | 154 void FillVAPicture(VAPictureH264* va_pic, scoped_refptr<H264Picture> pic); |
148 int FillVARefFramesFromDPB(const H264DPB& dpb, | 155 int FillVARefFramesFromDPB(const H264DPB& dpb, |
149 VAPictureH264* va_pics, | 156 VAPictureH264* va_pics, |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 | 197 |
191 // VP8Decoder::VP8Accelerator implementation. | 198 // VP8Decoder::VP8Accelerator implementation. |
192 scoped_refptr<VP8Picture> CreateVP8Picture() override; | 199 scoped_refptr<VP8Picture> CreateVP8Picture() override; |
193 | 200 |
194 bool SubmitDecode(const scoped_refptr<VP8Picture>& pic, | 201 bool SubmitDecode(const scoped_refptr<VP8Picture>& pic, |
195 const Vp8FrameHeader* frame_hdr, | 202 const Vp8FrameHeader* frame_hdr, |
196 const scoped_refptr<VP8Picture>& last_frame, | 203 const scoped_refptr<VP8Picture>& last_frame, |
197 const scoped_refptr<VP8Picture>& golden_frame, | 204 const scoped_refptr<VP8Picture>& golden_frame, |
198 const scoped_refptr<VP8Picture>& alt_frame) override; | 205 const scoped_refptr<VP8Picture>& alt_frame) override; |
199 | 206 |
200 bool OutputPicture(const scoped_refptr<VP8Picture>& pic) override; | 207 bool OutputPicture(const scoped_refptr<VP8Picture>& pic, |
| 208 const gfx::Rect& visible_rect) override; |
201 | 209 |
202 private: | 210 private: |
203 scoped_refptr<VaapiDecodeSurface> VP8PictureToVaapiDecodeSurface( | 211 scoped_refptr<VaapiDecodeSurface> VP8PictureToVaapiDecodeSurface( |
204 const scoped_refptr<VP8Picture>& pic); | 212 const scoped_refptr<VP8Picture>& pic); |
205 | 213 |
206 VaapiWrapper* vaapi_wrapper_; | 214 VaapiWrapper* vaapi_wrapper_; |
207 VaapiVideoDecodeAccelerator* vaapi_dec_; | 215 VaapiVideoDecodeAccelerator* vaapi_dec_; |
208 | 216 |
209 DISALLOW_COPY_AND_ASSIGN(VaapiVP8Accelerator); | 217 DISALLOW_COPY_AND_ASSIGN(VaapiVP8Accelerator); |
210 }; | 218 }; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 | 252 |
245 // VP9Decoder::VP9Accelerator implementation. | 253 // VP9Decoder::VP9Accelerator implementation. |
246 scoped_refptr<VP9Picture> CreateVP9Picture() override; | 254 scoped_refptr<VP9Picture> CreateVP9Picture() override; |
247 | 255 |
248 bool SubmitDecode(const scoped_refptr<VP9Picture>& pic, | 256 bool SubmitDecode(const scoped_refptr<VP9Picture>& pic, |
249 const Vp9SegmentationParams& seg, | 257 const Vp9SegmentationParams& seg, |
250 const Vp9LoopFilterParams& lf, | 258 const Vp9LoopFilterParams& lf, |
251 const std::vector<scoped_refptr<VP9Picture>>& ref_pictures, | 259 const std::vector<scoped_refptr<VP9Picture>>& ref_pictures, |
252 const base::Closure& done_cb) override; | 260 const base::Closure& done_cb) override; |
253 | 261 |
254 bool OutputPicture(const scoped_refptr<VP9Picture>& pic) override; | 262 bool OutputPicture(const scoped_refptr<VP9Picture>& pic, |
| 263 const gfx::Rect& visible_rect) override; |
255 | 264 |
256 bool IsFrameContextRequired() const override { return false; } | 265 bool IsFrameContextRequired() const override { return false; } |
257 | 266 |
258 bool GetFrameContext(const scoped_refptr<VP9Picture>& pic, | 267 bool GetFrameContext(const scoped_refptr<VP9Picture>& pic, |
259 Vp9FrameContext* frame_ctx) override; | 268 Vp9FrameContext* frame_ctx) override; |
260 | 269 |
261 private: | 270 private: |
262 scoped_refptr<VaapiDecodeSurface> VP9PictureToVaapiDecodeSurface( | 271 scoped_refptr<VaapiDecodeSurface> VP9PictureToVaapiDecodeSurface( |
263 const scoped_refptr<VP9Picture>& pic); | 272 const scoped_refptr<VP9Picture>& pic); |
264 | 273 |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
402 decoder_thread_task_runner_ = decoder_thread_.task_runner(); | 411 decoder_thread_task_runner_ = decoder_thread_.task_runner(); |
403 | 412 |
404 state_ = kIdle; | 413 state_ = kIdle; |
405 output_mode_ = config.output_mode; | 414 output_mode_ = config.output_mode; |
406 return true; | 415 return true; |
407 } | 416 } |
408 | 417 |
409 void VaapiVideoDecodeAccelerator::OutputPicture( | 418 void VaapiVideoDecodeAccelerator::OutputPicture( |
410 const scoped_refptr<VASurface>& va_surface, | 419 const scoped_refptr<VASurface>& va_surface, |
411 int32_t input_id, | 420 int32_t input_id, |
| 421 gfx::Rect visible_rect, |
412 VaapiPicture* picture) { | 422 VaapiPicture* picture) { |
413 DCHECK(task_runner_->BelongsToCurrentThread()); | 423 DCHECK(task_runner_->BelongsToCurrentThread()); |
414 | 424 |
415 int32_t output_id = picture->picture_buffer_id(); | 425 int32_t output_id = picture->picture_buffer_id(); |
416 | 426 |
417 TRACE_EVENT2("Video Decoder", "VAVDA::OutputSurface", "input_id", input_id, | 427 TRACE_EVENT2("Video Decoder", "VAVDA::OutputSurface", "input_id", input_id, |
418 "output_id", output_id); | 428 "output_id", output_id); |
419 | 429 |
420 DVLOG(3) << "Outputting VASurface " << va_surface->id() | 430 DVLOG(3) << "Outputting VASurface " << va_surface->id() |
421 << " into pixmap bound to picture buffer id " << output_id; | 431 << " into pixmap bound to picture buffer id " << output_id; |
422 | 432 |
423 RETURN_AND_NOTIFY_ON_FAILURE(picture->DownloadFromSurface(va_surface), | 433 RETURN_AND_NOTIFY_ON_FAILURE(picture->DownloadFromSurface(va_surface), |
424 "Failed putting surface into pixmap", | 434 "Failed putting surface into pixmap", |
425 PLATFORM_FAILURE, ); | 435 PLATFORM_FAILURE, ); |
426 | 436 |
427 // Notify the client a picture is ready to be displayed. | 437 // Notify the client a picture is ready to be displayed. |
428 ++num_frames_at_client_; | 438 ++num_frames_at_client_; |
429 TRACE_COUNTER1("Video Decoder", "Textures at client", num_frames_at_client_); | 439 TRACE_COUNTER1("Video Decoder", "Textures at client", num_frames_at_client_); |
430 DVLOG(4) << "Notifying output picture id " << output_id | 440 DVLOG(4) << "Notifying output picture id " << output_id << " for input " |
431 << " for input " << input_id << " is ready"; | 441 << input_id |
432 // TODO(posciak): Use visible size from decoder here instead | 442 << " is ready. visible rect: " << visible_rect.ToString(); |
433 // (crbug.com/402760). Passing (0, 0) results in the client using the | |
434 // visible size extracted from the container instead. | |
435 // TODO(hubbe): Use the correct color space. http://crbug.com/647725 | 443 // TODO(hubbe): Use the correct color space. http://crbug.com/647725 |
436 if (client_) | 444 if (client_) |
437 client_->PictureReady(Picture(output_id, input_id, gfx::Rect(0, 0), | 445 client_->PictureReady(Picture(output_id, input_id, visible_rect, |
438 gfx::ColorSpace(), picture->AllowOverlay())); | 446 gfx::ColorSpace(), picture->AllowOverlay())); |
439 } | 447 } |
440 | 448 |
441 void VaapiVideoDecodeAccelerator::TryOutputSurface() { | 449 void VaapiVideoDecodeAccelerator::TryOutputSurface() { |
442 DCHECK(task_runner_->BelongsToCurrentThread()); | 450 DCHECK(task_runner_->BelongsToCurrentThread()); |
443 | 451 |
444 // Handle Destroy() arriving while pictures are queued for output. | 452 // Handle Destroy() arriving while pictures are queued for output. |
445 if (!client_) | 453 if (!client_) |
446 return; | 454 return; |
447 | 455 |
(...skipping 688 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1136 | 1144 |
1137 { | 1145 { |
1138 base::AutoLock auto_lock(lock_); | 1146 base::AutoLock auto_lock(lock_); |
1139 // Drop any requests to output if we are resetting or being destroyed. | 1147 // Drop any requests to output if we are resetting or being destroyed. |
1140 if (state_ == kResetting || state_ == kDestroying) | 1148 if (state_ == kResetting || state_ == kDestroying) |
1141 return; | 1149 return; |
1142 } | 1150 } |
1143 | 1151 |
1144 pending_output_cbs_.push( | 1152 pending_output_cbs_.push( |
1145 base::Bind(&VaapiVideoDecodeAccelerator::OutputPicture, weak_this_, | 1153 base::Bind(&VaapiVideoDecodeAccelerator::OutputPicture, weak_this_, |
1146 dec_surface->va_surface(), dec_surface->bitstream_id())); | 1154 dec_surface->va_surface(), dec_surface->bitstream_id(), |
| 1155 dec_surface->visible_rect())); |
1147 | 1156 |
1148 TryOutputSurface(); | 1157 TryOutputSurface(); |
1149 } | 1158 } |
1150 | 1159 |
1151 scoped_refptr<VaapiVideoDecodeAccelerator::VaapiDecodeSurface> | 1160 scoped_refptr<VaapiVideoDecodeAccelerator::VaapiDecodeSurface> |
1152 VaapiVideoDecodeAccelerator::CreateSurface() { | 1161 VaapiVideoDecodeAccelerator::CreateSurface() { |
1153 DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); | 1162 DCHECK(decoder_thread_task_runner_->BelongsToCurrentThread()); |
1154 base::AutoLock auto_lock(lock_); | 1163 base::AutoLock auto_lock(lock_); |
1155 | 1164 |
1156 if (available_va_surfaces_.empty()) | 1165 if (available_va_surfaces_.empty()) |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1416 bool VaapiVideoDecodeAccelerator::VaapiH264Accelerator::SubmitDecode( | 1425 bool VaapiVideoDecodeAccelerator::VaapiH264Accelerator::SubmitDecode( |
1417 const scoped_refptr<H264Picture>& pic) { | 1426 const scoped_refptr<H264Picture>& pic) { |
1418 DVLOG(4) << "Decoding POC " << pic->pic_order_cnt; | 1427 DVLOG(4) << "Decoding POC " << pic->pic_order_cnt; |
1419 scoped_refptr<VaapiDecodeSurface> dec_surface = | 1428 scoped_refptr<VaapiDecodeSurface> dec_surface = |
1420 H264PictureToVaapiDecodeSurface(pic); | 1429 H264PictureToVaapiDecodeSurface(pic); |
1421 | 1430 |
1422 return vaapi_dec_->DecodeSurface(dec_surface); | 1431 return vaapi_dec_->DecodeSurface(dec_surface); |
1423 } | 1432 } |
1424 | 1433 |
1425 bool VaapiVideoDecodeAccelerator::VaapiH264Accelerator::OutputPicture( | 1434 bool VaapiVideoDecodeAccelerator::VaapiH264Accelerator::OutputPicture( |
1426 const scoped_refptr<H264Picture>& pic) { | 1435 const scoped_refptr<H264Picture>& pic, |
| 1436 const gfx::Rect& visible_rect) { |
1427 scoped_refptr<VaapiDecodeSurface> dec_surface = | 1437 scoped_refptr<VaapiDecodeSurface> dec_surface = |
1428 H264PictureToVaapiDecodeSurface(pic); | 1438 H264PictureToVaapiDecodeSurface(pic); |
1429 | 1439 dec_surface->SetVisibleRect(visible_rect); |
1430 vaapi_dec_->SurfaceReady(dec_surface); | 1440 vaapi_dec_->SurfaceReady(dec_surface); |
1431 | 1441 |
1432 return true; | 1442 return true; |
1433 } | 1443 } |
1434 | 1444 |
1435 void VaapiVideoDecodeAccelerator::VaapiH264Accelerator::Reset() { | 1445 void VaapiVideoDecodeAccelerator::VaapiH264Accelerator::Reset() { |
1436 vaapi_wrapper_->DestroyPendingBuffers(); | 1446 vaapi_wrapper_->DestroyPendingBuffers(); |
1437 } | 1447 } |
1438 | 1448 |
1439 scoped_refptr<VaapiVideoDecodeAccelerator::VaapiDecodeSurface> | 1449 scoped_refptr<VaapiVideoDecodeAccelerator::VaapiDecodeSurface> |
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1703 frame_hdr->frame_size, non_const_ptr)) | 1713 frame_hdr->frame_size, non_const_ptr)) |
1704 return false; | 1714 return false; |
1705 | 1715 |
1706 scoped_refptr<VaapiDecodeSurface> dec_surface = | 1716 scoped_refptr<VaapiDecodeSurface> dec_surface = |
1707 VP8PictureToVaapiDecodeSurface(pic); | 1717 VP8PictureToVaapiDecodeSurface(pic); |
1708 | 1718 |
1709 return vaapi_dec_->DecodeSurface(dec_surface); | 1719 return vaapi_dec_->DecodeSurface(dec_surface); |
1710 } | 1720 } |
1711 | 1721 |
1712 bool VaapiVideoDecodeAccelerator::VaapiVP8Accelerator::OutputPicture( | 1722 bool VaapiVideoDecodeAccelerator::VaapiVP8Accelerator::OutputPicture( |
1713 const scoped_refptr<VP8Picture>& pic) { | 1723 const scoped_refptr<VP8Picture>& pic, |
| 1724 const gfx::Rect& visible_rect) { |
1714 scoped_refptr<VaapiDecodeSurface> dec_surface = | 1725 scoped_refptr<VaapiDecodeSurface> dec_surface = |
1715 VP8PictureToVaapiDecodeSurface(pic); | 1726 VP8PictureToVaapiDecodeSurface(pic); |
1716 | 1727 dec_surface->SetVisibleRect(visible_rect); |
1717 vaapi_dec_->SurfaceReady(dec_surface); | 1728 vaapi_dec_->SurfaceReady(dec_surface); |
1718 return true; | 1729 return true; |
1719 } | 1730 } |
1720 | 1731 |
1721 scoped_refptr<VaapiVideoDecodeAccelerator::VaapiDecodeSurface> | 1732 scoped_refptr<VaapiVideoDecodeAccelerator::VaapiDecodeSurface> |
1722 VaapiVideoDecodeAccelerator::VaapiVP8Accelerator:: | 1733 VaapiVideoDecodeAccelerator::VaapiVP8Accelerator:: |
1723 VP8PictureToVaapiDecodeSurface(const scoped_refptr<VP8Picture>& pic) { | 1734 VP8PictureToVaapiDecodeSurface(const scoped_refptr<VP8Picture>& pic) { |
1724 VaapiVP8Picture* vaapi_pic = pic->AsVaapiVP8Picture(); | 1735 VaapiVP8Picture* vaapi_pic = pic->AsVaapiVP8Picture(); |
1725 CHECK(vaapi_pic); | 1736 CHECK(vaapi_pic); |
1726 return vaapi_pic->dec_surface(); | 1737 return vaapi_pic->dec_surface(); |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1867 frame_hdr->frame_size, non_const_ptr)) | 1878 frame_hdr->frame_size, non_const_ptr)) |
1868 return false; | 1879 return false; |
1869 | 1880 |
1870 scoped_refptr<VaapiDecodeSurface> dec_surface = | 1881 scoped_refptr<VaapiDecodeSurface> dec_surface = |
1871 VP9PictureToVaapiDecodeSurface(pic); | 1882 VP9PictureToVaapiDecodeSurface(pic); |
1872 | 1883 |
1873 return vaapi_dec_->DecodeSurface(dec_surface); | 1884 return vaapi_dec_->DecodeSurface(dec_surface); |
1874 } | 1885 } |
1875 | 1886 |
1876 bool VaapiVideoDecodeAccelerator::VaapiVP9Accelerator::OutputPicture( | 1887 bool VaapiVideoDecodeAccelerator::VaapiVP9Accelerator::OutputPicture( |
1877 const scoped_refptr<VP9Picture>& pic) { | 1888 const scoped_refptr<VP9Picture>& pic, |
| 1889 const gfx::Rect& visible_rect) { |
1878 scoped_refptr<VaapiDecodeSurface> dec_surface = | 1890 scoped_refptr<VaapiDecodeSurface> dec_surface = |
1879 VP9PictureToVaapiDecodeSurface(pic); | 1891 VP9PictureToVaapiDecodeSurface(pic); |
1880 | 1892 dec_surface->SetVisibleRect(visible_rect); |
1881 vaapi_dec_->SurfaceReady(dec_surface); | 1893 vaapi_dec_->SurfaceReady(dec_surface); |
1882 return true; | 1894 return true; |
1883 } | 1895 } |
1884 | 1896 |
1885 bool VaapiVideoDecodeAccelerator::VaapiVP9Accelerator::GetFrameContext( | 1897 bool VaapiVideoDecodeAccelerator::VaapiVP9Accelerator::GetFrameContext( |
1886 const scoped_refptr<VP9Picture>& pic, | 1898 const scoped_refptr<VP9Picture>& pic, |
1887 Vp9FrameContext* frame_ctx) { | 1899 Vp9FrameContext* frame_ctx) { |
1888 NOTIMPLEMENTED() << "Frame context update not supported"; | 1900 NOTIMPLEMENTED() << "Frame context update not supported"; |
1889 return false; | 1901 return false; |
1890 } | 1902 } |
1891 | 1903 |
1892 scoped_refptr<VaapiVideoDecodeAccelerator::VaapiDecodeSurface> | 1904 scoped_refptr<VaapiVideoDecodeAccelerator::VaapiDecodeSurface> |
1893 VaapiVideoDecodeAccelerator::VaapiVP9Accelerator:: | 1905 VaapiVideoDecodeAccelerator::VaapiVP9Accelerator:: |
1894 VP9PictureToVaapiDecodeSurface(const scoped_refptr<VP9Picture>& pic) { | 1906 VP9PictureToVaapiDecodeSurface(const scoped_refptr<VP9Picture>& pic) { |
1895 VaapiVP9Picture* vaapi_pic = pic->AsVaapiVP9Picture(); | 1907 VaapiVP9Picture* vaapi_pic = pic->AsVaapiVP9Picture(); |
1896 CHECK(vaapi_pic); | 1908 CHECK(vaapi_pic); |
1897 return vaapi_pic->dec_surface(); | 1909 return vaapi_pic->dec_surface(); |
1898 } | 1910 } |
1899 | 1911 |
1900 // static | 1912 // static |
1901 VideoDecodeAccelerator::SupportedProfiles | 1913 VideoDecodeAccelerator::SupportedProfiles |
1902 VaapiVideoDecodeAccelerator::GetSupportedProfiles() { | 1914 VaapiVideoDecodeAccelerator::GetSupportedProfiles() { |
1903 return VaapiWrapper::GetSupportedDecodeProfiles(); | 1915 return VaapiWrapper::GetSupportedDecodeProfiles(); |
1904 } | 1916 } |
1905 | 1917 |
1906 } // namespace media | 1918 } // namespace media |
OLD | NEW |