• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2022 The ChromiumOS Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 //! This file contains a dummy backend whose only purpose is to let the decoder
6 //! run so we can test it in isolation.
7 
8 use std::cell::RefCell;
9 use std::rc::Rc;
10 
11 use crate::backend::dummy::decoder::Backend;
12 use crate::backend::dummy::decoder::Handle;
13 use crate::codec::h264::dpb::Dpb;
14 use crate::codec::h264::dpb::DpbEntry;
15 use crate::codec::h264::parser::Pps;
16 use crate::codec::h264::parser::Slice;
17 use crate::codec::h264::parser::SliceHeader;
18 use crate::codec::h264::parser::Sps;
19 use crate::codec::h264::picture::PictureData;
20 use crate::decoder::stateless::h264::StatelessH264DecoderBackend;
21 use crate::decoder::stateless::h264::H264;
22 use crate::decoder::stateless::NewPictureResult;
23 use crate::decoder::stateless::NewStatelessDecoderError;
24 use crate::decoder::stateless::StatelessBackendResult;
25 use crate::decoder::stateless::StatelessDecoder;
26 use crate::decoder::BlockingMode;
27 
28 impl StatelessH264DecoderBackend for Backend {
new_sequence(&mut self, _: &Rc<Sps>) -> StatelessBackendResult<()>29     fn new_sequence(&mut self, _: &Rc<Sps>) -> StatelessBackendResult<()> {
30         Ok(())
31     }
32 
start_picture( &mut self, _: &mut Self::Picture, _: &PictureData, _: &Sps, _: &Pps, _: &Dpb<Self::Handle>, _: &SliceHeader, ) -> StatelessBackendResult<()>33     fn start_picture(
34         &mut self,
35         _: &mut Self::Picture,
36         _: &PictureData,
37         _: &Sps,
38         _: &Pps,
39         _: &Dpb<Self::Handle>,
40         _: &SliceHeader,
41     ) -> StatelessBackendResult<()> {
42         Ok(())
43     }
44 
new_field_picture(&mut self, _: u64, _: &Self::Handle) -> NewPictureResult<()>45     fn new_field_picture(&mut self, _: u64, _: &Self::Handle) -> NewPictureResult<()> {
46         Ok(())
47     }
48 
decode_slice( &mut self, _: &mut Self::Picture, _: &Slice, _: &Sps, _: &Pps, _: &[&DpbEntry<Self::Handle>], _: &[&DpbEntry<Self::Handle>], ) -> StatelessBackendResult<()>49     fn decode_slice(
50         &mut self,
51         _: &mut Self::Picture,
52         _: &Slice,
53         _: &Sps,
54         _: &Pps,
55         _: &[&DpbEntry<Self::Handle>],
56         _: &[&DpbEntry<Self::Handle>],
57     ) -> StatelessBackendResult<()> {
58         Ok(())
59     }
60 
submit_picture(&mut self, _: Self::Picture) -> StatelessBackendResult<Self::Handle>61     fn submit_picture(&mut self, _: Self::Picture) -> StatelessBackendResult<Self::Handle> {
62         Ok(Handle { handle: Rc::new(RefCell::new(Default::default())) })
63     }
64 
new_picture(&mut self, _: u64) -> NewPictureResult<()>65     fn new_picture(&mut self, _: u64) -> NewPictureResult<()> {
66         Ok(())
67     }
68 }
69 
70 impl StatelessDecoder<H264, Backend> {
71     // Creates a new instance of the decoder using the dummy backend.
new_dummy(blocking_mode: BlockingMode) -> Result<Self, NewStatelessDecoderError>72     pub fn new_dummy(blocking_mode: BlockingMode) -> Result<Self, NewStatelessDecoderError> {
73         Self::new(Backend::new(), blocking_mode)
74     }
75 }
76