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