@@ -192,6 +192,19 @@ webrtc::BiplanarYuv8Buffer* BiplanarYuv8Buffer::buffer() const {
192192I420Buffer::I420Buffer (webrtc::scoped_refptr<webrtc::I420BufferInterface> buffer)
193193    : PlanarYuv8Buffer(buffer) {}
194194
195+ webrtc::I420BufferInterface* I420Buffer::buffer () const  {
196+   return  static_cast <webrtc::I420BufferInterface*>(buffer_.get ());
197+ }
198+ 
199+ std::unique_ptr<I420Buffer> I420Buffer::scale (int  scaled_width,
200+                                               int  scaled_height) const  {
201+   rtc::scoped_refptr<webrtc::VideoFrameBuffer> result =
202+       buffer ()->Scale (scaled_width, scaled_height);
203+   return  std::make_unique<I420Buffer>(
204+       rtc::scoped_refptr<webrtc::I420BufferInterface>(
205+           const_cast <webrtc::I420BufferInterface*>(result->GetI420 ())));
206+ }
207+ 
195208I420ABuffer::I420ABuffer (
196209    webrtc::scoped_refptr<webrtc::I420ABufferInterface> buffer)
197210    : I420Buffer(buffer) {}
@@ -208,18 +221,79 @@ webrtc::I420ABufferInterface* I420ABuffer::buffer() const {
208221  return  static_cast <webrtc::I420ABufferInterface*>(buffer_.get ());
209222}
210223
211- I422Buffer::I422Buffer (webrtc::scoped_refptr<webrtc::I422BufferInterface> buffer)
224+ std::unique_ptr<I420ABuffer> I420ABuffer::scale (int  scaled_width,
225+                                                 int  scaled_height) const  {
226+   rtc::scoped_refptr<webrtc::VideoFrameBuffer> result =
227+       buffer ()->Scale (scaled_width, scaled_height);
228+   return  std::make_unique<I420ABuffer>(
229+       rtc::scoped_refptr<webrtc::I420ABufferInterface>(
230+           const_cast <webrtc::I420ABufferInterface*>(result->GetI420A ())));
231+ }
232+ 
233+ I422Buffer::I422Buffer (rtc::scoped_refptr<webrtc::I422BufferInterface> buffer)
212234    : PlanarYuv8Buffer(buffer) {}
213235
214- I444Buffer::I444Buffer (webrtc::scoped_refptr<webrtc::I444BufferInterface> buffer)
236+ webrtc::I422BufferInterface* I422Buffer::buffer () const  {
237+   return  static_cast <webrtc::I422BufferInterface*>(buffer_.get ());
238+ }
239+ 
240+ std::unique_ptr<I422Buffer> I422Buffer::scale (int  scaled_width,
241+                                               int  scaled_height) const  {
242+   rtc::scoped_refptr<webrtc::VideoFrameBuffer> result =
243+       buffer ()->Scale (scaled_width, scaled_height);
244+   return  std::make_unique<I422Buffer>(
245+       rtc::scoped_refptr<webrtc::I422BufferInterface>(
246+           const_cast <webrtc::I422BufferInterface*>(result->GetI422 ())));
247+ }
248+ 
249+ I444Buffer::I444Buffer (rtc::scoped_refptr<webrtc::I444BufferInterface> buffer)
215250    : PlanarYuv8Buffer(buffer) {}
216251
217- I010Buffer::I010Buffer (webrtc::scoped_refptr<webrtc::I010BufferInterface> buffer)
252+ webrtc::I444BufferInterface* I444Buffer::buffer () const  {
253+   return  static_cast <webrtc::I444BufferInterface*>(buffer_.get ());
254+ }
255+ 
256+ std::unique_ptr<I444Buffer> I444Buffer::scale (int  scaled_width,
257+                                               int  scaled_height) const  {
258+   rtc::scoped_refptr<webrtc::VideoFrameBuffer> result =
259+       buffer ()->Scale (scaled_width, scaled_height);
260+   return  std::make_unique<I444Buffer>(
261+       rtc::scoped_refptr<webrtc::I444BufferInterface>(
262+           const_cast <webrtc::I444BufferInterface*>(result->GetI444 ())));
263+ }
264+ 
265+ I010Buffer::I010Buffer (rtc::scoped_refptr<webrtc::I010BufferInterface> buffer)
218266    : PlanarYuv16BBuffer(buffer) {}
219267
220- NV12Buffer::NV12Buffer (webrtc::scoped_refptr<webrtc::NV12BufferInterface> buffer)
268+ webrtc::I010BufferInterface* I010Buffer::buffer () const  {
269+   return  static_cast <webrtc::I010BufferInterface*>(buffer_.get ());
270+ }
271+ 
272+ std::unique_ptr<I010Buffer> I010Buffer::scale (int  scaled_width,
273+                                               int  scaled_height) const  {
274+   rtc::scoped_refptr<webrtc::VideoFrameBuffer> result =
275+       buffer ()->Scale (scaled_width, scaled_height);
276+   return  std::make_unique<I010Buffer>(
277+       rtc::scoped_refptr<webrtc::I010BufferInterface>(
278+           const_cast <webrtc::I010BufferInterface*>(result->GetI010 ())));
279+ }
280+ 
281+ NV12Buffer::NV12Buffer (rtc::scoped_refptr<webrtc::NV12BufferInterface> buffer)
221282    : BiplanarYuv8Buffer(buffer) {}
222283
284+ webrtc::NV12BufferInterface* NV12Buffer::buffer () const  {
285+   return  static_cast <webrtc::NV12BufferInterface*>(buffer_.get ());
286+ }
287+ 
288+ std::unique_ptr<NV12Buffer> NV12Buffer::scale (int  scaled_width,
289+                                               int  scaled_height) const  {
290+   rtc::scoped_refptr<webrtc::VideoFrameBuffer> result =
291+       buffer ()->Scale (scaled_width, scaled_height);
292+   return  std::make_unique<NV12Buffer>(
293+       rtc::scoped_refptr<webrtc::NV12BufferInterface>(
294+           const_cast <webrtc::NV12BufferInterface*>(result->GetNV12 ())));
295+ }
296+ 
223297std::unique_ptr<I420Buffer> copy_i420_buffer (
224298    const  std::unique_ptr<I420Buffer>& i420) {
225299  return  std::make_unique<I420Buffer>(webrtc::I420Buffer::Copy (*i420->get ()));
0 commit comments