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

Side by Side Diff: content/common/gpu/media/vaapi_h264_dpb.cc

Issue 833063003: Add accelerated video decoder interface, VP8 and H.264 implementations and hook up to V4L2SVDA. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 11 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
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 <algorithm> 5 #include <algorithm>
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "content/common/gpu/media/h264_dpb.h" 9 #include "content/common/gpu/media/vaapi_h264_dpb.h"
10 10
11 namespace content { 11 namespace content {
12 12
13 H264DPB::H264DPB() : max_num_pics_(0) {} 13 VaapiH264DPB::VaapiH264DPB() : max_num_pics_(0) {
14 H264DPB::~H264DPB() {} 14 }
15 VaapiH264DPB::~VaapiH264DPB() {
16 }
15 17
16 void H264DPB::Clear() { 18 void VaapiH264DPB::Clear() {
17 pics_.clear(); 19 pics_.clear();
18 } 20 }
19 21
20 void H264DPB::set_max_num_pics(size_t max_num_pics) { 22 void VaapiH264DPB::set_max_num_pics(size_t max_num_pics) {
21 DCHECK_LE(max_num_pics, kDPBMaxSize); 23 DCHECK_LE(max_num_pics, kDPBMaxSize);
22 max_num_pics_ = max_num_pics; 24 max_num_pics_ = max_num_pics;
23 if (pics_.size() > max_num_pics_) 25 if (pics_.size() > max_num_pics_)
24 pics_.resize(max_num_pics_); 26 pics_.resize(max_num_pics_);
25 } 27 }
26 28
27 void H264DPB::DeleteByPOC(int poc) { 29 void VaapiH264DPB::DeleteByPOC(int poc) {
28 for (Pictures::iterator it = pics_.begin(); it != pics_.end(); ++it) { 30 for (Pictures::iterator it = pics_.begin(); it != pics_.end(); ++it) {
29 if ((*it)->pic_order_cnt == poc) { 31 if ((*it)->pic_order_cnt == poc) {
30 pics_.erase(it); 32 pics_.erase(it);
31 return; 33 return;
32 } 34 }
33 } 35 }
34 NOTREACHED() << "Missing POC: " << poc; 36 NOTREACHED() << "Missing POC: " << poc;
35 } 37 }
36 38
37 void H264DPB::DeleteUnused() { 39 void VaapiH264DPB::DeleteUnused() {
38 for (Pictures::iterator it = pics_.begin(); it != pics_.end(); ) { 40 for (Pictures::iterator it = pics_.begin(); it != pics_.end(); ) {
39 if ((*it)->outputted && !(*it)->ref) 41 if ((*it)->outputted && !(*it)->ref)
40 it = pics_.erase(it); 42 it = pics_.erase(it);
41 else 43 else
42 ++it; 44 ++it;
43 } 45 }
44 } 46 }
45 47
46 void H264DPB::StorePic(H264Picture* pic) { 48 void VaapiH264DPB::StorePic(VaapiH264Picture* pic) {
47 DCHECK_LT(pics_.size(), max_num_pics_); 49 DCHECK_LT(pics_.size(), max_num_pics_);
48 DVLOG(3) << "Adding PicNum: " << pic->pic_num << " ref: " << (int)pic->ref 50 DVLOG(3) << "Adding PicNum: " << pic->pic_num << " ref: " << (int)pic->ref
49 << " longterm: " << (int)pic->long_term << " to DPB"; 51 << " longterm: " << (int)pic->long_term << " to DPB";
50 pics_.push_back(pic); 52 pics_.push_back(pic);
51 } 53 }
52 54
53 int H264DPB::CountRefPics() { 55 int VaapiH264DPB::CountRefPics() {
54 int ret = 0; 56 int ret = 0;
55 for (size_t i = 0; i < pics_.size(); ++i) { 57 for (size_t i = 0; i < pics_.size(); ++i) {
56 if (pics_[i]->ref) 58 if (pics_[i]->ref)
57 ++ret; 59 ++ret;
58 } 60 }
59 return ret; 61 return ret;
60 } 62 }
61 63
62 void H264DPB::MarkAllUnusedForRef() { 64 void VaapiH264DPB::MarkAllUnusedForRef() {
63 for (size_t i = 0; i < pics_.size(); ++i) 65 for (size_t i = 0; i < pics_.size(); ++i)
64 pics_[i]->ref = false; 66 pics_[i]->ref = false;
65 } 67 }
66 68
67 H264Picture* H264DPB::GetShortRefPicByPicNum(int pic_num) { 69 VaapiH264Picture* VaapiH264DPB::GetShortRefPicByPicNum(int pic_num) {
68 for (size_t i = 0; i < pics_.size(); ++i) { 70 for (size_t i = 0; i < pics_.size(); ++i) {
69 H264Picture* pic = pics_[i]; 71 VaapiH264Picture* pic = pics_[i];
70 if (pic->ref && !pic->long_term && pic->pic_num == pic_num) 72 if (pic->ref && !pic->long_term && pic->pic_num == pic_num)
71 return pic; 73 return pic;
72 } 74 }
73 75
74 DVLOG(1) << "Missing short ref pic num: " << pic_num; 76 DVLOG(1) << "Missing short ref pic num: " << pic_num;
75 return NULL; 77 return NULL;
76 } 78 }
77 79
78 H264Picture* H264DPB::GetLongRefPicByLongTermPicNum(int pic_num) { 80 VaapiH264Picture* VaapiH264DPB::GetLongRefPicByLongTermPicNum(int pic_num) {
79 for (size_t i = 0; i < pics_.size(); ++i) { 81 for (size_t i = 0; i < pics_.size(); ++i) {
80 H264Picture* pic = pics_[i]; 82 VaapiH264Picture* pic = pics_[i];
81 if (pic->ref && pic->long_term && pic->long_term_pic_num == pic_num) 83 if (pic->ref && pic->long_term && pic->long_term_pic_num == pic_num)
82 return pic; 84 return pic;
83 } 85 }
84 86
85 DVLOG(1) << "Missing long term pic num: " << pic_num; 87 DVLOG(1) << "Missing long term pic num: " << pic_num;
86 return NULL; 88 return NULL;
87 } 89 }
88 90
89 H264Picture* H264DPB::GetLowestFrameNumWrapShortRefPic() { 91 VaapiH264Picture* VaapiH264DPB::GetLowestFrameNumWrapShortRefPic() {
90 H264Picture* ret = NULL; 92 VaapiH264Picture* ret = NULL;
91 for (size_t i = 0; i < pics_.size(); ++i) { 93 for (size_t i = 0; i < pics_.size(); ++i) {
92 H264Picture* pic = pics_[i]; 94 VaapiH264Picture* pic = pics_[i];
93 if (pic->ref && !pic->long_term && 95 if (pic->ref && !pic->long_term &&
94 (!ret || pic->frame_num_wrap < ret->frame_num_wrap)) 96 (!ret || pic->frame_num_wrap < ret->frame_num_wrap))
95 ret = pic; 97 ret = pic;
96 } 98 }
97 return ret; 99 return ret;
98 } 100 }
99 101
100 void H264DPB::GetNotOutputtedPicsAppending(H264Picture::PtrVector& out) { 102 void VaapiH264DPB::GetNotOutputtedPicsAppending(
103 VaapiH264Picture::PtrVector& out) {
101 for (size_t i = 0; i < pics_.size(); ++i) { 104 for (size_t i = 0; i < pics_.size(); ++i) {
102 H264Picture* pic = pics_[i]; 105 VaapiH264Picture* pic = pics_[i];
103 if (!pic->outputted) 106 if (!pic->outputted)
104 out.push_back(pic); 107 out.push_back(pic);
105 } 108 }
106 } 109 }
107 110
108 void H264DPB::GetShortTermRefPicsAppending(H264Picture::PtrVector& out) { 111 void VaapiH264DPB::GetShortTermRefPicsAppending(
112 VaapiH264Picture::PtrVector& out) {
109 for (size_t i = 0; i < pics_.size(); ++i) { 113 for (size_t i = 0; i < pics_.size(); ++i) {
110 H264Picture* pic = pics_[i]; 114 VaapiH264Picture* pic = pics_[i];
111 if (pic->ref && !pic->long_term) 115 if (pic->ref && !pic->long_term)
112 out.push_back(pic); 116 out.push_back(pic);
113 } 117 }
114 } 118 }
115 119
116 void H264DPB::GetLongTermRefPicsAppending(H264Picture::PtrVector& out) { 120 void VaapiH264DPB::GetLongTermRefPicsAppending(
121 VaapiH264Picture::PtrVector& out) {
117 for (size_t i = 0; i < pics_.size(); ++i) { 122 for (size_t i = 0; i < pics_.size(); ++i) {
118 H264Picture* pic = pics_[i]; 123 VaapiH264Picture* pic = pics_[i];
119 if (pic->ref && pic->long_term) 124 if (pic->ref && pic->long_term)
120 out.push_back(pic); 125 out.push_back(pic);
121 } 126 }
122 } 127 }
123 128
124 } // namespace content 129 } // namespace content
OLDNEW
« no previous file with comments | « content/common/gpu/media/vaapi_h264_dpb.h ('k') | content/common/gpu/media/vaapi_video_encode_accelerator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698