From 33990265032b0b0814f1eed5151f12ad78032756 Mon Sep 17 00:00:00 2001 From: Daniel Almeida Date: Mon, 5 Sep 2022 09:21:09 -0300 Subject: [PATCH] video: decoder: vaapi: port the VAAPI backend to cros-codecs Port the VAAPI backend to the new cros-codecs crate. This crate now contains all codec related code and is independent from the rest of the CrosVM code. BUG=b:214478588 TEST="cargo test --package devices --lib --features video-decoder --features vaapi -- virtio::video::decoder::backend::vaapi::tests::test_get_capabilities --include-ignored" Change-Id: Id207c53c0c4200e03ce8793d7c37cb5fbe808829 Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/3875044 Reviewed-by: Keiichi Watanabe Reviewed-by: Alexandre Courbot Commit-Queue: Alexandre Courbot --- Cargo.lock | 11 +- Cargo.toml | 2 +- devices/Cargo.toml | 4 +- .../src/virtio/video/decoder/backend/vaapi.rs | 629 ++++----- .../test-25fps-vp8-probability-table-0.bin | 2 - .../test-25fps-vp8-probability-table-1.bin | 2 - .../test-25fps-vp8-probability-table-2.bin | 2 - .../vaapi/test-25fps-vp8-slice-data-0.bin | Bin 14788 -> 0 bytes .../vaapi/test-25fps-vp8-slice-data-1.bin | Bin 257 -> 0 bytes .../vaapi/test-25fps-vp8-slice-data-2.bin | Bin 131 -> 0 bytes .../decoder/backend/vaapi/test-25fps.vp8 | Bin 255719 -> 0 bytes .../decoder/backend/vaapi/test-25fps.vp8.crc | 250 ---- .../virtio/video/decoder/backend/vaapi/vp8.rs | 1197 ----------------- media/vp8/Cargo.toml | 10 - media/vp8/src/bool_decoder.rs | 270 ---- media/vp8/src/lib.rs | 7 - media/vp8/src/parser.rs | 902 ------------- media/vp8/src/probs.rs | 376 ------ media/vp8/src/vp8-parser-test-0-inter.bin | Bin 554 -> 0 bytes media/vp8/src/vp8-parser-test-0-intra.bin | Bin 664 -> 0 bytes 20 files changed, 234 insertions(+), 3430 deletions(-) delete mode 100644 devices/src/virtio/video/decoder/backend/vaapi/test-25fps-vp8-probability-table-0.bin delete mode 100644 devices/src/virtio/video/decoder/backend/vaapi/test-25fps-vp8-probability-table-1.bin delete mode 100644 devices/src/virtio/video/decoder/backend/vaapi/test-25fps-vp8-probability-table-2.bin delete mode 100644 devices/src/virtio/video/decoder/backend/vaapi/test-25fps-vp8-slice-data-0.bin delete mode 100644 devices/src/virtio/video/decoder/backend/vaapi/test-25fps-vp8-slice-data-1.bin delete mode 100644 devices/src/virtio/video/decoder/backend/vaapi/test-25fps-vp8-slice-data-2.bin delete mode 100644 devices/src/virtio/video/decoder/backend/vaapi/test-25fps.vp8 delete mode 100644 devices/src/virtio/video/decoder/backend/vaapi/test-25fps.vp8.crc delete mode 100644 devices/src/virtio/video/decoder/backend/vaapi/vp8.rs delete mode 100644 media/vp8/Cargo.toml delete mode 100644 media/vp8/src/bool_decoder.rs delete mode 100644 media/vp8/src/lib.rs delete mode 100644 media/vp8/src/parser.rs delete mode 100644 media/vp8/src/probs.rs delete mode 100644 media/vp8/src/vp8-parser-test-0-inter.bin delete mode 100644 media/vp8/src/vp8-parser-test-0-intra.bin diff --git a/Cargo.lock b/Cargo.lock index dd3a7441fa..117ce5bfa8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -637,6 +637,7 @@ dependencies = [ "cfg-if", "chrono", "crc32fast", + "cros-codecs", "cros_async", "cros_tracing", "crosvm_cli", @@ -690,7 +691,6 @@ dependencies = [ "vm_control", "vm_memory", "vmm_vhost", - "vp8", "win_util", "winapi", ] @@ -2086,15 +2086,6 @@ dependencies = [ "tube_transporter", ] -[[package]] -name = "vp8" -version = "0.1.0" -dependencies = [ - "anyhow", - "bytes", - "log", -] - [[package]] name = "wasi" version = "0.10.0+wasi-snapshot-preview1" diff --git a/Cargo.toml b/Cargo.toml index 27c5dd97d5..33bd102c12 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -72,7 +72,7 @@ members = [ "media/ffmpeg", "media/libva", "media/libvda", - "media/vp8", + "media/cros-codecs", "net_sys", "net_util", "power_monitor", diff --git a/devices/Cargo.toml b/devices/Cargo.toml index c2bd40074f..4e83f9871c 100644 --- a/devices/Cargo.toml +++ b/devices/Cargo.toml @@ -15,7 +15,7 @@ gpu = ["gpu_display"] libvda-stub = ["libvda/libvda-stub"] tpm = ["tpm2"] usb = [] -vaapi = ["libva", "vp8", "downcast-rs", "crc32fast"] +vaapi = ["libva", "cros-codecs/vaapi", "downcast-rs", "crc32fast"] video-decoder = [] video-encoder = [] minigbm = ["rutabaga_gfx/minigbm"] @@ -41,6 +41,7 @@ cfg-if = "1.0.0" chrono = "*" crc32fast = { version = "1.2.1", optional = true } cros_async = { path = "../cros_async" } +cros-codecs = { path = "../media/cros-codecs", optional = true } crosvm_cli = { path = "../crosvm_cli" } data_model = { path = "../common/data_model" } dbus = { version = "0.9", optional = true } @@ -81,7 +82,6 @@ vmm_vhost = { path = "../third_party/vmm_vhost", features = ["vmm", "device", "v virtio_sys = { path = "../virtio_sys" } vm_control = { path = "../vm_control" } vm_memory = { path = "../vm_memory" } -vp8 = { path = "../media/vp8", optional = true } [target.'cfg(unix)'.dependencies] fuse = {path = "../fuse" } diff --git a/devices/src/virtio/video/decoder/backend/vaapi.rs b/devices/src/virtio/video/decoder/backend/vaapi.rs index d99830c6dd..52e0ce1c3c 100644 --- a/devices/src/virtio/video/decoder/backend/vaapi.rs +++ b/devices/src/virtio/video/decoder/backend/vaapi.rs @@ -4,9 +4,7 @@ #![deny(missing_docs)] -use std::any::Any; use std::borrow::Borrow; -use std::cell::RefCell; use std::collections::btree_map::Entry; use std::collections::BTreeMap; use std::collections::VecDeque; @@ -17,14 +15,10 @@ use anyhow::anyhow; use anyhow::Result; use base::MappedRegion; use base::MemoryMappingArena; -use libva::Config; -use libva::Context; +use cros_codecs::decoders::DynDecodedHandle; +use cros_codecs::decoders::VideoDecoder; +use cros_codecs::DecodedFormat; use libva::Display; -use libva::Image; -use libva::Picture; -use libva::PictureSync; -use libva::Surface; -use libva::UsageHint; use crate::virtio::video::decoder::Capability; use crate::virtio::video::decoder::DecoderBackend; @@ -45,108 +39,6 @@ use crate::virtio::video::resource::GuestResourceHandle; use crate::virtio::video::utils::EventQueue; use crate::virtio::video::utils::OutputQueue; -mod vp8; - -/// A surface pool handle to reduce the number of costly Surface allocations. -#[derive(Clone)] -pub struct SurfacePoolHandle { - surfaces: Rc>>, - current_resolution: Resolution, -} - -impl SurfacePoolHandle { - /// Creates a new pool - pub fn new(surfaces: Vec, resolution: Resolution) -> Self { - Self { - surfaces: Rc::new(RefCell::new(VecDeque::from(surfaces))), - current_resolution: resolution, - } - } - - /// Retrieve the current resolution for the pool - pub fn current_resolution(&self) -> &Resolution { - &self.current_resolution - } - - /// Sets the current resolution for the pool - pub fn set_current_resolution(&mut self, resolution: Resolution) { - self.current_resolution = resolution; - } - - /// Adds a new surface to the pool - pub fn add_surface(&mut self, surface: Surface) { - self.surfaces.borrow_mut().push_back(surface) - } - - /// Gets a free surface from the pool - pub fn get_surface(&mut self) -> Result { - let mut vec = self.surfaces.borrow_mut(); - vec.pop_front().ok_or(anyhow!("Out of surfaces")) - } - - /// Drops all surfaces from the pool - pub fn drop_surfaces(&mut self) { - self.surfaces = Default::default(); - } -} - -/// A decoded frame handle. -#[derive(Clone)] -pub struct DecodedFrameHandle { - /// The actual picture backing the handle. - picture: Option>>>, - /// The bitstream header parsed for this frame - header: Rc, - /// The decoder resolution when this frame was processed. Not all codecs - /// send resolution data in every frame header. - resolution: Resolution, - /// A handle to the surface pool. - surface_pool: SurfacePoolHandle, -} - -impl DecodedFrameHandle { - /// Creates a new handle - pub fn new( - picture: Rc>>, - header: Rc, - resolution: Resolution, - surface_pool: SurfacePoolHandle, - ) -> Self { - Self { - picture: Some(picture), - header, - resolution, - surface_pool, - } - } - - /// Retrieves a reference into the picture backing the handle - pub fn picture(&self) -> Rc>> { - Rc::clone(self.picture.as_ref().unwrap()) - } - - // Returns the resolution when this frame was processed - pub fn resolution(&self) -> &Resolution { - &self.resolution - } -} - -impl Drop for DecodedFrameHandle { - fn drop(&mut self) { - if let Ok(picture) = Rc::try_unwrap(self.picture.take().unwrap()) { - let pool = &mut self.surface_pool; - - // Only retrieve if the resolutions match, otherwise let the stale Surface drop. - if *pool.current_resolution() == self.resolution { - // Retrieve if not currently used by another field. - if let Ok(surface) = picture.into_inner().take_surface() { - pool.add_surface(surface); - } - } - } - } -} - /// A set of params returned when a dynamic resolution change is found in the /// bitstream. pub struct DrcParams { @@ -160,6 +52,28 @@ pub struct DrcParams { visible_rect: Rect, } +impl TryFrom for Format { + type Error = anyhow::Error; + + fn try_from(value: DecodedFormat) -> Result { + match value { + DecodedFormat::NV12 => Ok(Format::NV12), + DecodedFormat::I420 => Err(anyhow!("Unsupported format")), + } + } +} + +impl TryFrom for DecodedFormat { + type Error = anyhow::Error; + + fn try_from(value: Format) -> Result { + match value { + Format::NV12 => Ok(DecodedFormat::NV12), + _ => Err(anyhow!("Unsupported format")), + } + } +} + impl TryFrom for Profile { type Error = anyhow::Error; @@ -185,52 +99,6 @@ impl TryFrom for Profile { } } -/// State of the input stream, which can be either unparsed (we don't know the stream properties -/// yet) or parsed (we know the stream properties and are ready to decode). -pub enum StreamMetadataState { - /// The metadata for the current stream has not yet been parsed. - Unparsed { display: Rc }, - - /// The metadata for the current stream has been parsed and a suitable - /// VAContext has been created to accomodate it. - Parsed { - /// A VAContext from which we can decode from. - context: Rc, - /// The VAConfig that created the context. - config: Config, - /// A pool of surfaces. We reuse surfaces as they are expensive to allocate. - surface_pool: SurfacePoolHandle, - }, -} - -impl StreamMetadataState { - fn display(&self) -> Rc { - match self { - StreamMetadataState::Unparsed { display } => Rc::clone(display), - StreamMetadataState::Parsed { context, .. } => context.display(), - } - } - - fn context(&self) -> Result> { - match self { - StreamMetadataState::Unparsed { .. } => Err(anyhow!("Stream metadata not parsed yet")), - StreamMetadataState::Parsed { context, .. } => Ok(Rc::clone(context)), - } - } - - fn surface_pool(&self) -> Result { - match self { - StreamMetadataState::Unparsed { .. } => Err(anyhow!("Invalid state")), - StreamMetadataState::Parsed { surface_pool, .. } => Ok(surface_pool.clone()), - } - } - - fn get_surface(&mut self) -> Result { - let mut surface_pool = self.surface_pool()?; - surface_pool.get_surface() - } -} - /// The state for the output queue containing the buffers that will receive the /// decoded data. enum OutputQueueState { @@ -550,12 +418,12 @@ pub struct Resolution { /// A decoder session for the libva backend pub struct VaapiDecoderSession { /// The implementation for the codec specific logic. - codec: Box, + codec: Box, /// The state for the output queue. Updated when `set_output_buffer_count` /// is called or when we detect a dynamic resolution change. output_queue_state: OutputQueueState, /// Queue containing decoded pictures. - ready_queue: VecDeque, + ready_queue: VecDeque>, /// The event queue we can use to signal new events. event_queue: EventQueue, /// Whether the decoder is currently flushing. @@ -607,25 +475,6 @@ impl, U: BufferHandle> AsMut<[u8]> for BufferMapping { } impl VaapiDecoderSession { - /// Create the `num_surfaces` surfaces for a combination of `width`, - /// `height` and `rt_format`. - fn create_surfaces( - display: Rc, - width: u32, - height: u32, - rt_format: u32, - num_surfaces: usize, - ) -> Result> { - display.create_surfaces( - rt_format, - Some(libva::constants::VA_FOURCC_NV12), // NV12 is hardcoded for now - width, - height, - Some(UsageHint::USAGE_HINT_DECODER), - num_surfaces as u32, - ) - } - fn change_resolution(&mut self, new_params: DrcParams) -> Result<()> { // Ask the client for new buffers. self.event_queue @@ -647,77 +496,8 @@ impl VaapiDecoderSession { Ok(()) } - /// Copies `src` into `dst` as NV12, removing any extra padding. - fn nv12_copy( - mut src: &[u8], - mut dst: &mut [u8], - width: u32, - height: u32, - strides: [u32; 3], - offsets: [u32; 3], - ) { - let width = width.try_into().unwrap(); - let height = height.try_into().unwrap(); - let data = src; - - // Copy luma - for _ in 0..height { - dst[..width].copy_from_slice(&src[..width]); - dst = &mut dst[width..]; - src = &src[strides[0] as usize..]; - } - - // Advance to the offset of the chroma plane - let mut src = &data[offsets[1] as usize..]; - - // Copy chroma - for _ in 0..height / 2 { - dst[..width].copy_from_slice(&src[..width]); - dst = &mut dst[width..]; - src = &src[strides[1_usize] as usize..]; - } - } - - /// Copy the decoded `image` into `output_buffer`, removing any extra - /// padding. This is hardcoded to NV12 for now. - fn copy_image_to_output(image: &Image, output_buffer: &mut GuestResource) -> Result<()> { - let va_img = image.image(); - - if va_img.format.fourcc != libva::constants::VA_FOURCC_NV12 { - panic!("Unsupported format") - } - - // Get a mapping from the start of the buffer to the size of the - // underlying decoded data in the Image. - let mut output_map: BufferMapping<_, GuestResourceHandle> = BufferMapping::new( - &mut output_buffer.handle, - 0, - usize::from(va_img.width) * usize::from(va_img.height) * 3 / 2, - )?; - - let output_bytes = output_map.as_mut(); - - let decoded_bytes = image.as_ref(); - - VaapiDecoderSession::nv12_copy( - decoded_bytes, - output_bytes, - u32::from(va_img.width), - u32::from(va_img.height), - va_img.pitches, - va_img.offsets, - ); - - Ok(()) - } - /// Copy raw decoded data from `image` into the output buffer - pub fn output_picture( - &mut self, - decoded_frame: DecodedFrameHandle, - resolution: Resolution, - image_format: &libva::VAImageFormat, - ) -> Result { + pub fn output_picture(&mut self, decoded_frame: &dyn DynDecodedHandle) -> Result { let output_queue = self.output_queue_state.output_queue_mut()?; // Output buffer to be used. @@ -728,27 +508,29 @@ impl VaapiDecoderSession { } }; - let timestamp = RefCell::borrow(&decoded_frame.picture()).timestamp(); - let picture = decoded_frame.picture(); - let mut picture = picture.borrow_mut(); + let mapped_resolution = decoded_frame + .dyn_picture_mut() + .dyn_mappable_handle_mut() + .mapped_resolution()?; - // Get the associated VAImage, which will map the - // VASurface onto our address space. - let image = Image::new( - &mut picture, - *image_format, - resolution.width, - resolution.height, - false, + let display_resolution = decoded_frame.display_resolution(); + + // Get a mapping from the start of the buffer to the size of the + // underlying decoded data in the Image. + let mut output_map: BufferMapping<_, GuestResourceHandle> = BufferMapping::new( + &mut output_buffer.handle, + 0, + mapped_resolution.width as usize * mapped_resolution.height as usize * 3 / 2, )?; - VaapiDecoderSession::copy_image_to_output(&image, output_buffer)?; + let output_bytes = output_map.as_mut(); - // The actual width and height. Note that The width and height fields - // returned in the VAImage structure may get enlarged for some YUV - // formats. - let width = i32::from(image.image().width); - let height = i32::from(image.image().height); + decoded_frame + .dyn_picture_mut() + .dyn_mappable_handle_mut() + .read(output_bytes)?; + + let timestamp = decoded_frame.timestamp(); let picture_buffer_id = picture_buffer_id as i32; // Say that we are done decoding this picture. @@ -759,8 +541,8 @@ impl VaapiDecoderSession { visible_rect: Rect { left: 0, top: 0, - right: width as i32, - bottom: height as i32, + right: display_resolution.width as i32, + bottom: display_resolution.height as i32, }, }) .map_err(|e| { @@ -771,17 +553,8 @@ impl VaapiDecoderSession { } fn drain_ready_queue(&mut self) -> Result<()> { - let image_format = match self.codec.va_image_fmt() { - Some(image_fmt) => *image_fmt, - // No image format currently set means we have no output to drain. - None => return Ok(()), - }; - while let Some(decoded_frame) = self.ready_queue.pop_front() { - let resolution = *decoded_frame.resolution(); - - let outputted = - self.output_picture(decoded_frame.clone(), resolution, &image_format)?; + let outputted = self.output_picture(decoded_frame.as_ref())?; if !outputted { self.ready_queue.push_front(decoded_frame); break; @@ -791,45 +564,6 @@ impl VaapiDecoderSession { Ok(()) } - /// Convenience function to get the test NV12 result. This can be used to, - /// e.g.: dump it to disk or compute a CRC32 - #[cfg(test)] - #[allow(dead_code)] - fn get_test_nv12 U, U>( - display: Rc, - picture: Rc>>, - width: u32, - height: u32, - action: T, - ) -> U { - let mut picture = picture.borrow_mut(); - - let image_fmts = display.query_image_formats().unwrap(); - let image_fmt = image_fmts - .into_iter() - .find(|f| f.fourcc == libva::constants::VA_FOURCC_NV12) - .expect("No valid VAImageFormat found for NV12"); - - // Get the associated VAImage, which will map the - // VASurface onto our address space. - let image = Image::new(&mut picture, image_fmt, width, height, false).unwrap(); - - let va_img = image.image(); - let mut out: Vec = - vec![0; usize::from(va_img.width) * usize::from(va_img.height) * 3 / 2]; - - VaapiDecoderSession::nv12_copy( - image.as_ref(), - &mut out, - u32::from(va_img.width), - u32::from(va_img.height), - va_img.pitches, - va_img.offsets, - ); - - action(&out) - } - fn try_emit_flush_completed(&mut self) -> Result<()> { let num_remaining = self.ready_queue.len(); @@ -848,14 +582,58 @@ impl VaapiDecoderSession { } impl DecoderSession for VaapiDecoderSession { - fn set_output_parameters(&mut self, buffer_count: usize, format: Format) -> VideoResult<()> { + fn set_output_parameters(&mut self, buffer_count: usize, _: Format) -> VideoResult<()> { let output_queue_state = &mut self.output_queue_state; + // This logic can still be improved, in particular it needs better + // support at the virtio-video protocol level. + // + // We must ensure that set_output_parameters is only called after we are + // sure that we have processed some stream metadata, which currently is + // not the case. In particular, the {SET|GET}_PARAMS logic currently + // takes place *before* we had a chance to parse any stream metadata at + // all. + // + // This can lead to a situation where we accept a format (say, NV12), + // but then discover we are unable to decode it after processing some + // buffers (because the stream indicates that the bit depth is 10, for + // example). Note that there is no way to reject said stream as of right + // now unless we hardcode NV12 in cros-codecs itself. + // + // Nevertheless, the support is already in place in cros-codecs: the + // decoders will queue buffers until they read some metadata. At this + // point, it will allow for the negotiation of the decoded format until + // a new call to decode() is made. At the crosvm level, we can use this + // window of time to try different decoded formats with .try_format(). + // + // For now, we accept the default format chosen by cros-codecs instead. + // In practice, this means NV12 if it the stream can be decoded into + // NV12 and if the hardware can do so. + match output_queue_state { OutputQueueState::AwaitingBufferCount | OutputQueueState::Drc => { - self.codec - .set_raw_fmt(format) - .map_err(VideoError::BackendFailure)?; + // Accept the default format chosen by cros-codecs instead. + // + // if let Some(backend_format) = self.backend.backend().format() { + // let backend_format = Format::try_from(backend_format); + + // let format_matches = match backend_format { + // Ok(backend_format) => backend_format != format, + // Err(_) => false, + // }; + + // if !format_matches { + // let format = + // DecodedFormat::try_from(format).map_err(VideoError::BackendFailure)?; + + // self.backend.backend().try_format(format).map_err(|e| { + // VideoError::BackendFailure(anyhow!( + // "Failed to set the codec backend format: {}", + // e + // )) + // })?; + // } + // } *output_queue_state = OutputQueueState::Decoding { output_queue: OutputQueue::new(buffer_count), @@ -877,12 +655,19 @@ impl DecoderSession for VaapiDecoderSession { offset: u32, bytes_used: u32, ) -> VideoResult<()> { - let frames = self.codec.decode(timestamp, &resource, offset, bytes_used); + let bitstream_map: BufferMapping<_, GuestResourceHandle> = BufferMapping::new( + resource, + offset.try_into().unwrap(), + bytes_used.try_into().unwrap(), + ) + .map_err(|e| VideoError::BackendFailure(anyhow!(e)))?; + + let frames = self.codec.decode(timestamp, &bitstream_map); match frames { Ok(frames) => { self.event_queue - .queue_event(DecoderEvent::NotifyEndOfBitstreamBuffer(resource_id)) + .queue_event(DecoderEvent::NotifyEndOfBitstreamBuffer(timestamp as u32)) .map_err(|e| { VideoError::BackendFailure(anyhow!( "Can't queue the NotifyEndOfBitstream event {}", @@ -890,8 +675,22 @@ impl DecoderSession for VaapiDecoderSession { )) })?; - if let Some(params) = self.codec.drc() { - self.change_resolution(params) + if self.codec.negotiation_possible() { + let resolution = self.codec.backend().coded_resolution().unwrap(); + + let drc_params = DrcParams { + min_num_buffers: self.codec.backend().num_resources_total(), + width: resolution.width, + height: resolution.height, + visible_rect: Rect { + left: 0, + top: 0, + right: resolution.width as i32, + bottom: resolution.height as i32, + }, + }; + + self.change_resolution(drc_params) .map_err(VideoError::BackendFailure)?; } @@ -919,7 +718,7 @@ impl DecoderSession for VaapiDecoderSession { )) })?; - Err(VideoError::BackendFailure(e)) + Err(VideoError::BackendFailure(anyhow!(e))) } } } @@ -928,7 +727,11 @@ impl DecoderSession for VaapiDecoderSession { self.flushing = true; // Retrieve ready frames from the codec, if any. - let pics = self.codec.flush().map_err(VideoError::BackendFailure)?; + let pics = self + .codec + .flush() + .map_err(|e| VideoError::BackendFailure(anyhow!(e)))?; + self.ready_queue.extend(pics); self.drain_ready_queue() @@ -952,10 +755,57 @@ impl DecoderSession for VaapiDecoderSession { })?; let display = Rc::new(Display::open().map_err(VideoError::BackendFailure)?); - let codec = match self.coded_format { - Format::VP8 => Box::new( - vp8::Vp8Codec::new(display).map_err(|e| VideoError::BackendFailure(anyhow!(e)))?, - ), + let codec: Box = match self.coded_format { + Format::VP8 => { + let backend = Box::new( + cros_codecs::decoders::vp8::backends::stateless::vaapi::Backend::new( + Rc::clone(&display), + ) + .unwrap(), + ); + + Box::new( + cros_codecs::decoders::vp8::decoder::Decoder::new( + backend, + cros_codecs::decoders::BlockingMode::NonBlocking, + ) + .map_err(|e| VideoError::BackendFailure(anyhow!(e)))?, + ) + } + + Format::VP9 => { + let backend = Box::new( + cros_codecs::decoders::vp9::backends::stateless::vaapi::Backend::new( + Rc::clone(&display), + ) + .unwrap(), + ); + + Box::new( + cros_codecs::decoders::vp9::decoder::Decoder::new( + backend, + cros_codecs::decoders::BlockingMode::NonBlocking, + ) + .map_err(|e| VideoError::BackendFailure(anyhow!(e)))?, + ) + } + + Format::H264 => { + let backend = Box::new( + cros_codecs::decoders::h264::backends::stateless::vaapi::Backend::new( + Rc::clone(&display), + ) + .unwrap(), + ); + Box::new( + cros_codecs::decoders::h264::decoder::Decoder::new( + backend, + cros_codecs::decoders::BlockingMode::NonBlocking, + ) + .map_err(|e| VideoError::BackendFailure(anyhow!(e)))?, + ) + } + _ => return Err(VideoError::InvalidFormat), }; @@ -1062,10 +912,56 @@ impl DecoderBackend for VaapiDecoder { fn new_session(&mut self, format: Format) -> VideoResult { let display = Rc::new(Display::open().map_err(VideoError::BackendFailure)?); - let codec = match format { - Format::VP8 => Box::new( - vp8::Vp8Codec::new(display).map_err(|e| VideoError::BackendFailure(anyhow!(e)))?, - ), + let codec: Box = match format { + Format::VP8 => { + let backend = Box::new( + cros_codecs::decoders::vp8::backends::stateless::vaapi::Backend::new( + Rc::clone(&display), + ) + .unwrap(), + ); + + Box::new( + cros_codecs::decoders::vp8::decoder::Decoder::new( + backend, + cros_codecs::decoders::BlockingMode::NonBlocking, + ) + .map_err(|e| VideoError::BackendFailure(anyhow!(e)))?, + ) + } + + Format::VP9 => { + let backend = Box::new( + cros_codecs::decoders::vp9::backends::stateless::vaapi::Backend::new( + Rc::clone(&display), + ) + .unwrap(), + ); + + Box::new( + cros_codecs::decoders::vp9::decoder::Decoder::new( + backend, + cros_codecs::decoders::BlockingMode::NonBlocking, + ) + .map_err(|e| VideoError::BackendFailure(anyhow!(e)))?, + ) + } + + Format::H264 => { + let backend = Box::new( + cros_codecs::decoders::h264::backends::stateless::vaapi::Backend::new( + Rc::clone(&display), + ) + .unwrap(), + ); + Box::new( + cros_codecs::decoders::h264::decoder::Decoder::new( + backend, + cros_codecs::decoders::BlockingMode::NonBlocking, + ) + .map_err(|e| VideoError::BackendFailure(anyhow!(e)))?, + ) + } _ => return Err(VideoError::InvalidFormat), }; @@ -1080,74 +976,9 @@ impl DecoderBackend for VaapiDecoder { } } -pub trait VaapiCodec: downcast_rs::Downcast { - /// Decode the compressed stream contained in - /// [`offset`..`offset`+`bytes_used`] of the shared memory in `resource`. - /// `timestamp` is the timestamp for that part of the stream. - /// Returns zero or more decoded pictures depending on the compressed - /// stream, which might also be part of the codec's decoded picture buffer - /// (DPB). - fn decode( - &mut self, - timestamp: u64, - resource: &GuestResourceHandle, - offset: u32, - bytes_used: u32, - ) -> Result>; - - /// Flush the decoder i.e. finish processing all queued decode requests and - /// emit frames for them. - fn flush(&mut self) -> Result>; - - /// Returns the current VA image format - fn va_image_fmt(&self) -> &Option; - - /// Set the raw picture format. - fn set_raw_fmt(&mut self, format: Format) -> Result<()>; - - /// Whether the codec has encountered a dynamic resolution change, i.e.: - /// Whether there were changes in coded resolution (OUTPUT width and - /// height), in the visible resolution (selection rectangles), in the - /// minimum number of buffers needed for decoding or in bit-depth of the - /// bitstream. This function will be called at every frame by the session. - fn drc(&mut self) -> Option; -} -downcast_rs::impl_downcast!(VaapiCodec); // Used in unit tests. - #[cfg(test)] mod tests { - use base::FromRawDescriptor; - use base::MemoryMappingBuilder; - use base::SafeDescriptor; - use base::SharedMemory; - use super::*; - use crate::virtio::video::resource::GuestMemArea; - use crate::virtio::video::resource::GuestMemHandle; - - pub(crate) fn build_resource(slice: &[u8]) -> GuestResourceHandle { - let input_shm = SharedMemory::new("", u64::try_from(slice.len()).unwrap()).unwrap(); - - let input_mapping = MemoryMappingBuilder::new(input_shm.size() as usize) - .from_shared_memory(&input_shm) - .build() - .unwrap(); - - input_mapping - .write_slice(slice, 0) - .expect("Failed to write stream data into input buffer."); - - GuestResourceHandle::GuestPages(GuestMemHandle { - // Safe because we are taking ownership of a just-duplicated FD. - desc: unsafe { - SafeDescriptor::from_raw_descriptor(base::clone_descriptor(&input_shm).unwrap()) - }, - mem_areas: vec![GuestMemArea { - offset: 0, - length: input_shm.size() as usize, - }], - }) - } #[test] // Ignore this test by default as it requires libva-compatible hardware. diff --git a/devices/src/virtio/video/decoder/backend/vaapi/test-25fps-vp8-probability-table-0.bin b/devices/src/virtio/video/decoder/backend/vaapi/test-25fps-vp8-probability-table-0.bin deleted file mode 100644 index 46ea618c62..0000000000 --- a/devices/src/virtio/video/decoder/backend/vaapi/test-25fps-vp8-probability-table-0.bin +++ /dev/null @@ -1,2 +0,0 @@ -€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€òˆþÿäÛ€€€€€½òÿãÕÿÛ€€€j~I3ÖÑÿ€€€bøÿìâÿÿ€€€µ…îþÝêÿš€€€N†Ê Æ´IÛ€€€¹ùÿóÿ€€€€€¸–÷ÿìà€€€€€MnØì怀€€€eûÿñÿ€€€€€ª‹ñüìÑÿÿ€€€%tÄóäÿÿ€€€Ìþÿõÿ€€€€€ úÿ€€€€fg`Ó«€€€€€˜Ë’ðÿ€€€€€8‡«£êက€€€.FÂà€ì€€ÿ€€€€€€€€f€€€€€€€€%€€€€€€€€€€Æ#íßÁ»¢ ‘›>ƒ-Æݬ°ÜüÝD/’Е§Ý¢ÿ߀•ñÿÝàÿÿ€€€¸êýÞÜÿÇ€€€Qcµò°¾ùÊÿÿ€èýÖÅòÄÿÿ€cyÒúÉÆÿÊ€€€[£òª»÷Òÿÿ€Èöÿêÿ€€€€€m²ñÿçõÿÿ€€€,‚ÉýÍÀÿÿ€€€„ïûÛÑÿ¥€€€^ˆáûÚ¾ÿÿ€€€d®õº¡ÿÇ€€€¶ùÿè뀀€€€|ñÿãꀀ€€€#MµûÁÓÿÍ€€€÷ÿìçÿÿ€€€yëÿáãÿÿ€€€-c¼UÃÙà€€€ûÿÕÿ€€€€€Ëøÿÿ€€€€€€‰±ÿàÿ€€€€€ý øûÏÐÿÀ€€€¯ ^+Á¹€Æ3ÿ€I« ¡³=§ê€_÷ýÔ·ÿÿ€€€OZôúÓÑÿÿ€€€M`¼Ãÿ€€ïûÚÛÿÍ€€€%3Ûÿ倀€€€E.¾ïÉÚÿ䀀€¿ûÿÿ€€€€€€/¥ùÿÕÿ€€€€€|øÿÿ€€€€€€nÿ€€€€€¾$æìÿ€€€€€•ÿ€€€€€€€€âÿ€€€€€€€€÷Àÿ€€€€€€€€€€€€€€€€†üÿÿ€€€€€€[‰úÿÿ€€€€€€7]ÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€åÕº¿ ð¯]&_(©¸8®<»€:F—²4ª¨€€p‰KÇ¿EŸ³’€Qm›bÓ×D®€€€ -21:¬´$²šÃ4AÆÇ.ÜBr€AJY·Á$ݨ€G9>šª0sÎsâÕ£XÛðà€€€H––FØÍ(«€€€52Fuz*„ª¦ÿQ\#ÌËÀ€€æ>R2¼ÄP€€Ô$$8¤­;b®€ñ’tØÕ,€æ€€GzëÍ39€€€'=ˆÔŸ´Qðy”g®Ö†õ€ÿ6T}{Ê.fñ€ÿ/>Tƒ¹>{ï€ý—€€€€€€€€E €€€€÷€€:L€€€€ý€€ \ No newline at end of file diff --git a/devices/src/virtio/video/decoder/backend/vaapi/test-25fps-vp8-probability-table-1.bin b/devices/src/virtio/video/decoder/backend/vaapi/test-25fps-vp8-probability-table-1.bin deleted file mode 100644 index 19b4062632..0000000000 --- a/devices/src/virtio/video/decoder/backend/vaapi/test-25fps-vp8-probability-table-1.bin +++ /dev/null @@ -1,2 +0,0 @@ -€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€òˆþÿäÛ€€€€€½òÿãÕÿÛ€€€j~I3ÖÑÿ€€€bøÿìâÿÿ€€€µ…îþÝêÿš€€€N†Ê Æ´IÛ€€€¹ùÿóÿ€€€€€¸–÷ÿìà€€€€€MnØì怀€€€eûÿñÿ€€€€€ª‹ñüìÑÿÿ€€€%tÄóäÿÿ€€€Ìþÿõÿ€€€€€ úÿ€€€€fg`Ó«€€€€€˜Ë’ðÿ€€€€€8‡«£êက€€€.FÂà€ì€€ÿ€€€€€€€€f€€€€€€€€%€€€€€€€€€€Æ#íßÁ»¢ ‘›>ƒ-Æݬ°ÜüÝD/’Е§Ý¢ÿ߀•ñÿÝàÿÿ€€€¸êýÞÜÿÇ€€€Qcµò°¾ùÊÿÿ€èýÖÅòÄÿÿ€cyÒúÉÆÿÊ€€€[£òª»÷Òÿÿ€Èöÿêÿ€€€€€m²ñÿçõÿÿ€€€,‚ÉýÍÀÿÿ€€€„ïûÛÑÿ¥€€€^ˆáûÚ¾ÿÿ€€€d®õº¡ÿÇ€€€¶ùÿè뀀€€€|ñÿãꀀ€€€#MµûÁÓÿÍ€€€÷ÿìçÿÿ€€€yëÿáãÿÿ€€€-c¼UÃÙà€€€ûÿÕÿ€€€€€Ëøÿÿ€€€€€€‰±ÿàÿ€€€€€ý øûÏÐÿÀ€€€¯ ^+Á¹€Æ3ÿ€I« ¡³=§ê€_÷ýÔ·ÿÿ€€€OZôúÓÑÿÿ€€€M`¼Ãÿ€€ïûÚÛÿÍ€€€%3Ûÿ倀€€€E.¾ïÉÚÿ䀀€¿ûÿÿ€€€€€€/¥ùÿÕÿ€€€€€|øÿÿ€€€€€€nÿ€€€€€¾$æìÿ€€€€€•ÿ€€€€€€€€âÿ€€€€€€€€÷Àÿ€€€€€€€€€€€€€€€€†üÿÿ€€€€€€[‰úÿÿ€€€€€€7]ÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€åÕÿº¿ ð¯]&_(©¸8®<»€:F—²4ª¨€€p‰KÇ¿EŸ³’€Qm›bÓ×D®€€€ -21:¬´$²šÃ4AÆÇ.ÜBr€AJY·Á$ݨ€G9>šª0sÎsâÕ£XÛðà€€€H––FØÍ(«€€€52Fuz*„ª¦ÿQ\#ÌËÀ€€æ>R2¼ÄP€€Ô$$8¤­;b®€ñ’tØÕ,€æ€€GzëÍ39€€€'=ˆÔŸ´Qðyÿg®Ö†õ€ÿ·T}{Ê.fñ€ÿ/>Tƒ¹>{ï€ý—€€€€€€€€E €€€€÷€€:L€€€€ý€€ \ No newline at end of file diff --git a/devices/src/virtio/video/decoder/backend/vaapi/test-25fps-vp8-probability-table-2.bin b/devices/src/virtio/video/decoder/backend/vaapi/test-25fps-vp8-probability-table-2.bin deleted file mode 100644 index 19b4062632..0000000000 --- a/devices/src/virtio/video/decoder/backend/vaapi/test-25fps-vp8-probability-table-2.bin +++ /dev/null @@ -1,2 +0,0 @@ -€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€òˆþÿäÛ€€€€€½òÿãÕÿÛ€€€j~I3ÖÑÿ€€€bøÿìâÿÿ€€€µ…îþÝêÿš€€€N†Ê Æ´IÛ€€€¹ùÿóÿ€€€€€¸–÷ÿìà€€€€€MnØì怀€€€eûÿñÿ€€€€€ª‹ñüìÑÿÿ€€€%tÄóäÿÿ€€€Ìþÿõÿ€€€€€ úÿ€€€€fg`Ó«€€€€€˜Ë’ðÿ€€€€€8‡«£êက€€€.FÂà€ì€€ÿ€€€€€€€€f€€€€€€€€%€€€€€€€€€€Æ#íßÁ»¢ ‘›>ƒ-Æݬ°ÜüÝD/’Е§Ý¢ÿ߀•ñÿÝàÿÿ€€€¸êýÞÜÿÇ€€€Qcµò°¾ùÊÿÿ€èýÖÅòÄÿÿ€cyÒúÉÆÿÊ€€€[£òª»÷Òÿÿ€Èöÿêÿ€€€€€m²ñÿçõÿÿ€€€,‚ÉýÍÀÿÿ€€€„ïûÛÑÿ¥€€€^ˆáûÚ¾ÿÿ€€€d®õº¡ÿÇ€€€¶ùÿè뀀€€€|ñÿãꀀ€€€#MµûÁÓÿÍ€€€÷ÿìçÿÿ€€€yëÿáãÿÿ€€€-c¼UÃÙà€€€ûÿÕÿ€€€€€Ëøÿÿ€€€€€€‰±ÿàÿ€€€€€ý øûÏÐÿÀ€€€¯ ^+Á¹€Æ3ÿ€I« ¡³=§ê€_÷ýÔ·ÿÿ€€€OZôúÓÑÿÿ€€€M`¼Ãÿ€€ïûÚÛÿÍ€€€%3Ûÿ倀€€€E.¾ïÉÚÿ䀀€¿ûÿÿ€€€€€€/¥ùÿÕÿ€€€€€|øÿÿ€€€€€€nÿ€€€€€¾$æìÿ€€€€€•ÿ€€€€€€€€âÿ€€€€€€€€÷Àÿ€€€€€€€€€€€€€€€€†üÿÿ€€€€€€[‰úÿÿ€€€€€€7]ÿ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€åÕÿº¿ ð¯]&_(©¸8®<»€:F—²4ª¨€€p‰KÇ¿EŸ³’€Qm›bÓ×D®€€€ -21:¬´$²šÃ4AÆÇ.ÜBr€AJY·Á$ݨ€G9>šª0sÎsâÕ£XÛðà€€€H––FØÍ(«€€€52Fuz*„ª¦ÿQ\#ÌËÀ€€æ>R2¼ÄP€€Ô$$8¤­;b®€ñ’tØÕ,€æ€€GzëÍ39€€€'=ˆÔŸ´Qðyÿg®Ö†õ€ÿ·T}{Ê.fñ€ÿ/>Tƒ¹>{ï€ý—€€€€€€€€E €€€€÷€€:L€€€€ý€€ \ No newline at end of file diff --git a/devices/src/virtio/video/decoder/backend/vaapi/test-25fps-vp8-slice-data-0.bin b/devices/src/virtio/video/decoder/backend/vaapi/test-25fps-vp8-slice-data-0.bin deleted file mode 100644 index bd6a6844397dafa2df8cc89b098d2e50419676d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14788 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 AMgRZ+ diff --git a/devices/src/virtio/video/decoder/backend/vaapi/test-25fps-vp8-slice-data-1.bin b/devices/src/virtio/video/decoder/backend/vaapi/test-25fps-vp8-slice-data-1.bin deleted file mode 100644 index 85ed11a63e216f315ee02e23b432ce412b843c0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 257 zcmV+c0sj6G6aXv{`~VmMUH)hP?J4Fv-Y^`JeyomWYZToVi0IZ2Y&mFOA~cjq4`z}9|fLLD%#E6W^EcAdW`cs;=Sw2}*uE?$#n=@dC z)Ed|Rd5fnY0=oVS5KNVUz%lHKUGJU%QGf#sq+XCW6stheXff2Z^_i$-nsZu4ByJ3!PZNq9_2MrEDg7X49kjT7*@EVf H?@L$!625pk diff --git a/devices/src/virtio/video/decoder/backend/vaapi/test-25fps-vp8-slice-data-2.bin b/devices/src/virtio/video/decoder/backend/vaapi/test-25fps-vp8-slice-data-2.bin deleted file mode 100644 index 6391b98d92f2e6e934d5190ffa9c16b3e44c071c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmV-}0DS+k2>=`s`~VmL7|<_Q=rq5;E;o%h1C&UTh<5qW9Po!}ZE0+16=O>9y)Pif z{o4iRku@le0|@Ftuty6QAxP-#DR2tx$Dvc`p6InHs)}N@jidvw>E6&DhRDc_BPGc` l|2-_&>%VItY$dmhYElM$lh0Hmm;12TiN7G#E)fE~fB*zyJpBLw diff --git a/devices/src/virtio/video/decoder/backend/vaapi/test-25fps.vp8 b/devices/src/virtio/video/decoder/backend/vaapi/test-25fps.vp8 deleted file mode 100644 index dc22d4379221f2926d1bde3eeec112abd12a31f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255719 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 z 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%0DOVYRS>>Z?g#~ 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 Ra32X&T{{a=sU{C-6 diff --git a/devices/src/virtio/video/decoder/backend/vaapi/test-25fps.vp8.crc b/devices/src/virtio/video/decoder/backend/vaapi/test-25fps.vp8.crc deleted file mode 100644 index 72f1ff6402..0000000000 --- a/devices/src/virtio/video/decoder/backend/vaapi/test-25fps.vp8.crc +++ /dev/null @@ -1,250 +0,0 @@ -23ad177c -1b9c8cae -233b5afd -e23f451d -b3e6e470 -e204fec1 -36cf5e86 -fba3f823 -7b86762f -7de7535c -0e7a5291 -a8897d66 -3e0c1e91 -d7d29155 -d7316205 -810a2ae9 -92dac65f -d323a7b8 -bca35249 -1e9ad2a6 -b6fd4f82 -6fe8fe2e -bf949b74 -3f59a84b -85e1a39b -63ac1653 -ef92b037 -a775daa2 -5dc0dd88 -468bd51f -cbb91ea3 -90b60e7b -bf1ae070 -1c67ce82 -7ad8c84d -6ef5edd2 -05f75839 -5ebd62ac -d35c657f -a1dac6fd -0b2f6044 -734d13bb -5679bd57 -fa199a3e -a4a4d6d4 -6bd56dbe -d799a86f -227bbf58 -1541656d -c723e6b8 -e07cc71a -04778c4f -fdd8b676 -8c681031 -e6847162 -8c7c211d -5035e333 -4c5c8b3a -77401793 -8d15d34c -3587624d -47307e2b -4480cb44 -fbe55c59 -6520892e -39df34bc -8f8754e0 -3b08b12f -bff1799a -0034759b -68861fbb -801befe6 -c8101440 -cc5b856d -96c1b94c -a87e1845 -18b19080 -63e158c3 -96e5974c -3faf3f86 -5947f01f -ee3c1a46 -69f11a00 -2dff59fe -d427bce6 -6bcee14f -04a10cc5 -e3e12f43 -873d32ac -f986a99f -ac98dfc4 -c08f5c03 -7649d9f5 -68b76170 -7f8c6613 -433f4970 -9ec1ba95 -f7b03143 -37873456 -e2da340c -c467fd97 -bf68a9c5 -dcece5cb -5aa3c7d7 -9027434c -5e4690f9 -79b59499 -3e6c0f04 -42853006 -9b761bc1 -2f2d290b -12595217 -70482029 -770bf015 -f70adb10 -4189e078 -a4619a87 -5b2044f2 -2d162e58 -e071f345 -f845ff1f -c41a2258 -c300cd49 -b5209b89 -51490639 -d5356f60 -a232fd4b -0d98e5bf -d34b3e3b -9b951312 -b2cd5ead -d9bfb278 -6018e793 -e8b2f310 -a8910a6c -accee1d8 -6e51c606 -9050757f -aa752e7b -a4274821 -a0561066 -9258c326 -f6b66d22 -0e2f7048 -84d7bd75 -9a2b13ff -7db691f1 -e0fd2689 -8fb24bc0 -89b201e9 -041dae30 -c8856390 -468220e4 -1371ec57 -9ddb3769 -76aa8d4c -2e178d45 -7519b38e -23da843f -da24380f -34e3b146 -42735634 -206269cc -22ff4630 -8599f9d0 -5353b7b9 -f198b705 -27a62538 -2b6309a1 -bbed8b85 -c8c605ba -23cc23aa -a4b7cfab -e8adab6b -50308549 -82428aed -90e1a158 -f6177648 -63f1a6bf -53dd22fc -e47289f0 -f0c36a34 -fcad085d -fd925241 -32a79fc0 -047d4d80 -d31235f8 -5c46386a -aaa9ee3c -935a352c -88df87ae -e4dd9b22 -605f46fb -087558c3 -25461a0f -fe564aec -1dc99d84 -7c2b1a2b -08c433ce -951609cb -e69a15ee -0be31b4a -b0988d03 -c5c0769c -7807a352 -925e5b37 -7dc3aaf0 -d1621353 -f1c0e356 -49a5f2d8 -2a7f52ef -f280d5b6 -4f546dc9 -af08b467 -9612c8b7 -360aebde -2311a9fb -c175e073 -966537f0 -1cd52932 -cb098673 -11861fe5 -b482ec61 -a3d89823 -96fe22e6 -d28c91b1 -13ff2ba3 -998e52b7 -ae6ebd46 -20381724 -a0c7113d -de28b72d -a50f4d0e -f6ac0144 -71679cf2 -f354c9d1 -6d84c275 -ca0b4570 -95138a3a -e943fac5 -af611c9c -d5811d81 -24fd3da7 -90ec3b70 -300659b6 -1aa57f0f -3192b32f -34091c37 -b7bc0a9f -ea1f6fa7 diff --git a/devices/src/virtio/video/decoder/backend/vaapi/vp8.rs b/devices/src/virtio/video/decoder/backend/vaapi/vp8.rs deleted file mode 100644 index 33a181da0b..0000000000 --- a/devices/src/virtio/video/decoder/backend/vaapi/vp8.rs +++ /dev/null @@ -1,1197 +0,0 @@ -// Copyright 2022 The ChromiumOS Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -use std::cell::RefCell; -use std::convert::TryFrom; -use std::rc::Rc; - -use anyhow::anyhow; -use anyhow::Context; -use anyhow::Result; -use libva::BufferType; -use libva::IQMatrix; -use libva::IQMatrixBufferVP8; -use libva::Picture; -use libva::ProbabilityDataBufferVP8; -use vp8::parser as vp8; - -use crate::virtio::video::decoder::backend::vaapi::BufferMapping; -use crate::virtio::video::decoder::backend::vaapi::DecodedFrameHandle; -use crate::virtio::video::decoder::backend::vaapi::DrcParams; -use crate::virtio::video::decoder::backend::vaapi::Resolution; -use crate::virtio::video::decoder::backend::vaapi::StreamMetadataState; -use crate::virtio::video::decoder::backend::vaapi::SurfacePoolHandle; -use crate::virtio::video::decoder::backend::vaapi::VaapiCodec; -use crate::virtio::video::decoder::backend::vaapi::VaapiDecoderSession; -use crate::virtio::video::error::VideoError; -use crate::virtio::video::format::Format; -use crate::virtio::video::format::Rect; -use crate::virtio::video::resource::GuestResourceHandle; - -/// The number of surfaces to allocate for this codec. Same as GStreamer's vavp8dec. -const NUM_SURFACES: usize = 7; - -#[cfg(test)] -#[derive(Default)] -struct Params { - pic_param: Option, - slice_param: Option, - slice_data: Option, - iq_matrix: Option, - probability_table: Option, - last_pic: Option, -} - -pub struct Vp8Codec { - /// The metadata state. Updated whenever the decoder reads new data from the stream. - metadata_state: StreamMetadataState, - - /// A parser to extract bitstream data and build frame data in turn - parser: vp8::Parser, - - /// The picture used as the last reference picture. - last_picture: Option, - /// The picture used as the golden reference picture. - golden_ref_picture: Option, - /// The picture used as the alternate reference picture. - alt_ref_picture: Option, - - /// The VAImageFormat we will decode into - image_fmt: Option, - /// The current resolution - resolution: Resolution, - - /// Whether we are still waiting for the leading key frame. We skip all - /// frames until then, since decoding can only start from key frames. - wait_keyframe: bool, - - /// Whether the initial setup is done after reading some metadata for the - /// first time. - open: bool, - - /// Whether the codec has identified a dynamic resolution change. Cleared - /// when this information is relayed to the session. - drc: bool, - - #[cfg(test)] - params: Params, -} - -impl Vp8Codec { - /// Create a new codec backend for VP8. - pub fn new(display: Rc) -> Result { - Ok(Self { - metadata_state: StreamMetadataState::Unparsed { display }, - parser: Default::default(), - last_picture: Default::default(), - golden_ref_picture: Default::default(), - alt_ref_picture: Default::default(), - image_fmt: Default::default(), - resolution: Default::default(), - wait_keyframe: true, - open: Default::default(), - drc: Default::default(), - - #[cfg(test)] - params: Default::default(), - }) - } - - /// A clamp such that min <= x <= max - fn clamp(x: T, low: T, high: T) -> T { - if x > high { - high - } else if x < low { - low - } else { - x - } - } - - fn change_resolution(&mut self, resolution: Resolution) -> Result<()> { - self.resolution = resolution; - - let mut pool = self.metadata_state.surface_pool()?; - - // Tell the pool so it can refuse stale surfaces. - pool.set_current_resolution(resolution); - - self.drc = true; - - Ok(()) - } - - /// Initialize the codec state by reading some metadata from the current - /// frame. - fn open(&mut self, frame_hdr: &vp8::Header) -> Result<()> { - let display = self.metadata_state.display(); - - let va_profile = libva::VAProfile::VAProfileVP8Version0_3; - let rt_format = libva::constants::VA_RT_FORMAT_YUV420; - - let frame_w = u32::from(frame_hdr.width()); - let frame_h = u32::from(frame_hdr.height()); - - let attrs = vec![libva::VAConfigAttrib { - type_: libva::VAConfigAttribType::VAConfigAttribRTFormat, - value: rt_format, - }]; - - let config = display.create_config( - Some(attrs), - va_profile, - libva::VAEntrypoint::VAEntrypointVLD, - )?; - - let surfaces = VaapiDecoderSession::create_surfaces( - Rc::clone(&display), - frame_w, - frame_h, - rt_format, - NUM_SURFACES, - )?; - - let context = Rc::new(display.create_context( - &config, - i32::try_from(frame_w)?, - i32::try_from(frame_h)?, - Some(&surfaces), - true, - )?); - - let resolution = Resolution { - width: frame_w, - height: frame_h, - }; - - let surface_pool = SurfacePoolHandle::new(surfaces, resolution); - - self.metadata_state = StreamMetadataState::Parsed { - context, - config, - surface_pool, - }; - - self.change_resolution(resolution)?; - - Ok(()) - } - - /// Check for new stream parameters. This might mean that the surfaces - /// and/or context get recreated. If a new resolution is detected, the - /// decoder will enter a DRC state and it will ask crosvm for new output - /// buffers to write to. - fn check_stream_params(&mut self, frame_hdr: &vp8::Header) -> Result<()> { - let frame_w = u32::from(frame_hdr.width()); - let frame_h = u32::from(frame_hdr.height()); - - assert!(frame_hdr.version() <= 3); - - let rt_format = libva::constants::VA_RT_FORMAT_YUV420; - - let recreate_surfaces = - self.resolution.width != frame_w || self.resolution.height != frame_h; - - if recreate_surfaces { - let display = self.metadata_state.display(); - let surfaces = VaapiDecoderSession::create_surfaces( - display, - frame_w, - frame_h, - rt_format, - NUM_SURFACES, - )?; - - let mut pool = self.metadata_state.surface_pool()?; - - // Drop the old surfaces still in the pool - pool.drop_surfaces(); - - for surface in surfaces { - pool.add_surface(surface) - } - - self.change_resolution(Resolution { - width: frame_w, - height: frame_h, - })?; - } - - Ok(()) - } - - fn build_iq_matrix(frame_hdr: &vp8::Header, parser: &vp8::Parser) -> Result { - let mut quantization_index: [[u16; 6]; 4] = Default::default(); - let seg = parser.segmentation(); - - for (i, quantization_index) in quantization_index.iter_mut().enumerate() { - let mut qi_base: i16; - - if seg.segmentation_enabled { - qi_base = i16::from(seg.quantizer_update_value[i]); - if !seg.segment_feature_mode { - qi_base += i16::from(frame_hdr.quant_indices().y_ac_qi); - } - } else { - qi_base = i16::from(frame_hdr.quant_indices().y_ac_qi); - } - - let mut qi = qi_base; - quantization_index[0] = Vp8Codec::clamp(u16::try_from(qi)?, 0, 127); - qi = qi_base + i16::from(frame_hdr.quant_indices().y_dc_delta); - quantization_index[1] = Vp8Codec::clamp(u16::try_from(qi)?, 0, 127); - qi = qi_base + i16::from(frame_hdr.quant_indices().y2_dc_delta); - quantization_index[2] = Vp8Codec::clamp(u16::try_from(qi)?, 0, 127); - qi = qi_base + i16::from(frame_hdr.quant_indices().y2_ac_delta); - quantization_index[3] = Vp8Codec::clamp(u16::try_from(qi)?, 0, 127); - qi = qi_base + i16::from(frame_hdr.quant_indices().uv_dc_delta); - quantization_index[4] = Vp8Codec::clamp(u16::try_from(qi)?, 0, 127); - qi = qi_base + i16::from(frame_hdr.quant_indices().uv_ac_delta); - quantization_index[5] = Vp8Codec::clamp(u16::try_from(qi)?, 0, 127); - } - - Ok(BufferType::IQMatrix(IQMatrix::VP8(IQMatrixBufferVP8::new( - quantization_index, - )))) - } - - fn build_probability_table(frame_hdr: &vp8::Header) -> libva::BufferType { - BufferType::Probability(ProbabilityDataBufferVP8::new(frame_hdr.coeff_prob())) - } - - fn build_pic_param( - frame_hdr: &vp8::Header, - resolution: &Resolution, - seg: &vp8::Segmentation, - adj: &vp8::MbLfAdjustments, - last: &Option, - golden: &Option, - alt: &Option, - ) -> Result { - let mut loop_filter_level: [u8; 4] = Default::default(); - let mut loop_filter_deltas_ref_frame: [i8; 4] = Default::default(); - let mut loop_filter_deltas_mode: [i8; 4] = Default::default(); - - for i in 0..4 { - let mut level; - if seg.segmentation_enabled { - level = seg.lf_update_value[i]; - if !seg.segment_feature_mode { - level += i8::try_from(frame_hdr.loop_filter_level())?; - } - } else { - level = i8::try_from(frame_hdr.loop_filter_level())?; - } - - loop_filter_level[i] = Vp8Codec::clamp(u8::try_from(level)?, 0, 63); - loop_filter_deltas_ref_frame[i] = adj.ref_frame_delta[i]; - loop_filter_deltas_mode[i] = adj.mb_mode_delta[i]; - } - - let last_surface = if let Some(last_ref) = last { - last_ref.picture().borrow().surface().id() - } else { - libva::constants::VA_INVALID_SURFACE - }; - - let golden_surface = if let Some(golden_ref) = golden { - golden_ref.picture().borrow().surface().id() - } else { - libva::constants::VA_INVALID_SURFACE - }; - - let alt_surface = if let Some(alt_ref) = alt { - alt_ref.picture().borrow().surface().id() - } else { - libva::constants::VA_INVALID_SURFACE - }; - - let pic_fields = libva::VP8PicFields::new( - u32::from(!frame_hdr.key_frame()), - u32::from(frame_hdr.version()), - u32::from(seg.segmentation_enabled), - u32::from(seg.update_mb_segmentation_map), - u32::from(seg.update_segment_feature_data), - u32::from(frame_hdr.filter_type()), - u32::from(frame_hdr.sharpness_level()), - u32::from(adj.loop_filter_adj_enable), - u32::from(adj.mode_ref_lf_delta_update), - u32::from(frame_hdr.sign_bias_golden()), - u32::from(frame_hdr.sign_bias_alternate()), - u32::from(frame_hdr.mb_no_coeff_skip()), - u32::from(frame_hdr.loop_filter_level() == 0), - ); - - let bool_coder_ctx = libva::BoolCoderContextVPX::new( - u8::try_from(frame_hdr.bd_range())?, - u8::try_from(frame_hdr.bd_value())?, - u8::try_from(frame_hdr.bd_count())?, - ); - - let pic_param = libva::PictureParameterBufferVP8::new( - resolution.width, - resolution.height, - last_surface, - golden_surface, - alt_surface, - &pic_fields, - seg.segment_prob, - loop_filter_level, - loop_filter_deltas_ref_frame, - loop_filter_deltas_mode, - frame_hdr.prob_skip_false(), - frame_hdr.prob_intra(), - frame_hdr.prob_last(), - frame_hdr.prob_golden(), - frame_hdr.mode_probs().intra_16x16_prob, - frame_hdr.mode_probs().intra_chroma_prob, - frame_hdr.mv_prob(), - &bool_coder_ctx, - ); - - Ok(libva::BufferType::PictureParameter( - libva::PictureParameter::VP8(pic_param), - )) - } - - fn build_slice_param(frame_hdr: &vp8::Header, slice_size: usize) -> Result { - let mut partition_size: [u32; 9] = Default::default(); - let num_of_partitions = (1 << frame_hdr.log2_nbr_of_dct_partitions()) + 1; - - partition_size[0] = frame_hdr.first_part_size() - ((frame_hdr.header_size() + 7) >> 3); - - partition_size[1..num_of_partitions] - .clone_from_slice(&frame_hdr.partition_size()[..(num_of_partitions - 1)]); - - Ok(libva::BufferType::SliceParameter( - libva::SliceParameter::VP8(libva::SliceParameterBufferVP8::new( - u32::try_from(slice_size)?, - u32::from(frame_hdr.data_chunk_size()), - 0, - frame_hdr.header_size(), - u8::try_from(num_of_partitions)?, - partition_size, - )), - )) - } - - /// Replace a reference frame with `picture`. - fn replace_reference(reference: &mut Option, picture: &DecodedFrameHandle) { - *reference = Some(picture.clone()); - } - - fn update_references( - decoded_frame: &DecodedFrameHandle, - last_picture: &mut Option, - golden_ref_picture: &mut Option, - alt_ref_picture: &mut Option, - ) -> Result<()> { - let header = decoded_frame - .header - .downcast_ref::() - .with_context(|| "decoded frame header is not a VP8 header")?; - - if header.key_frame() { - Vp8Codec::replace_reference(last_picture, decoded_frame); - Vp8Codec::replace_reference(golden_ref_picture, decoded_frame); - Vp8Codec::replace_reference(alt_ref_picture, decoded_frame); - } else { - if header.refresh_alternate_frame() { - Vp8Codec::replace_reference(alt_ref_picture, decoded_frame); - } else { - match header.copy_buffer_to_alternate() { - 0 => { /* do nothing */ } - - 1 => { - if let Some(last_picture) = last_picture { - Vp8Codec::replace_reference(alt_ref_picture, last_picture); - } - } - - 2 => { - if let Some(golden_ref) = golden_ref_picture { - Vp8Codec::replace_reference(alt_ref_picture, golden_ref); - } - } - - other => panic!("Invalid value: {}", other), - } - } - - if header.refresh_golden_frame() { - Vp8Codec::replace_reference(golden_ref_picture, decoded_frame); - } else { - match header.copy_buffer_to_golden() { - 0 => { /* do nothing */ } - - 1 => { - if let Some(last_picture) = last_picture { - Vp8Codec::replace_reference(golden_ref_picture, last_picture); - } - } - - 2 => { - if let Some(alt_ref) = alt_ref_picture { - Vp8Codec::replace_reference(golden_ref_picture, alt_ref); - } - } - - other => panic!("Invalid value: {}", other), - } - } - - if header.refresh_last() { - Vp8Codec::replace_reference(last_picture, decoded_frame); - } - } - - Ok(()) - } - - #[cfg(test)] - fn save_params( - params: &mut Params, - pic_param: BufferType, - slice_param: BufferType, - slice_data: BufferType, - iq_matrix: BufferType, - probability_table: BufferType, - last_pic: DecodedFrameHandle, - ) { - params.pic_param = Some(pic_param); - params.slice_param = Some(slice_param); - params.slice_data = Some(slice_data); - params.iq_matrix = Some(iq_matrix); - params.probability_table = Some(probability_table); - params.last_pic = Some(last_pic); - } - - /// Decode a single frame, copying the decoded data into the output buffer - /// as per the format in `self.image_fmt`. - fn decode_frame>( - &mut self, - frame: vp8::Frame, - timestamp: u64, - ) -> Result { - let context = self.metadata_state.context()?; - - let iq_buffer = - context.create_buffer(Vp8Codec::build_iq_matrix(&frame.header, &self.parser)?)?; - let probs = context.create_buffer(Vp8Codec::build_probability_table(&frame.header))?; - - let pic_param = context.create_buffer(Vp8Codec::build_pic_param( - &frame.header, - &self.resolution, - self.parser.segmentation(), - self.parser.mb_lf_adjust(), - &self.last_picture, - &self.golden_ref_picture, - &self.alt_ref_picture, - )?)?; - - let slice_param = context.create_buffer(Vp8Codec::build_slice_param( - &frame.header, - frame.bitstream.as_ref().len(), - )?)?; - let slice_data = context.create_buffer(libva::BufferType::SliceData(Vec::from( - frame.bitstream.as_ref(), - )))?; - - let context = self.metadata_state.context()?; - let surface = self.metadata_state.get_surface()?; - - let mut picture = Picture::new(timestamp, Rc::clone(&context), surface); - - // Add buffers with the parsed data. - picture.add_buffer(iq_buffer); - picture.add_buffer(probs); - picture.add_buffer(pic_param); - picture.add_buffer(slice_param); - picture.add_buffer(slice_data); - - let picture = picture.begin()?.render()?.end()?.sync()?; - let picture = Rc::new(RefCell::new(picture)); - - #[cfg(test)] - Vp8Codec::save_params( - &mut self.params, - Vp8Codec::build_pic_param( - &frame.header, - &self.resolution, - self.parser.segmentation(), - self.parser.mb_lf_adjust(), - &self.last_picture, - &self.golden_ref_picture, - &self.alt_ref_picture, - )?, - Vp8Codec::build_slice_param(&frame.header, frame.bitstream.as_ref().len())?, - libva::BufferType::SliceData(Vec::from(frame.bitstream.as_ref())), - Vp8Codec::build_iq_matrix(&frame.header, &self.parser)?, - Vp8Codec::build_probability_table(&frame.header), - DecodedFrameHandle::new( - Rc::clone(&picture), - Rc::new(frame.header.clone()), - self.resolution, - self.metadata_state.surface_pool()?, - ), - ); - - let decoded_frame = DecodedFrameHandle::new( - picture, - Rc::new(frame.header), - self.resolution, - self.metadata_state.surface_pool()?, - ); - - // Do DPB management - Vp8Codec::update_references( - &decoded_frame, - &mut self.last_picture, - &mut self.golden_ref_picture, - &mut self.alt_ref_picture, - )?; - - Ok(decoded_frame) - } - - /// Handle a single frame. - fn handle_frame>( - &mut self, - frame: vp8::Frame, - timestamp: u64, - ) -> Result> { - if self.wait_keyframe { - if !frame.header.key_frame() { - return Ok(Vec::new()); - } - } - - if !self.open { - self.open(&frame.header)?; - self.open = true; - } - - self.wait_keyframe = false; - - if frame.header.key_frame() { - // Always check for changes at every key frame - self.check_stream_params(&frame.header)?; - } - - Ok(vec![(self.decode_frame(frame, timestamp)?)]) - } -} - -impl VaapiCodec for Vp8Codec { - fn decode( - &mut self, - timestamp: u64, - resource: &GuestResourceHandle, - offset: u32, - bytes_used: u32, - ) -> Result> { - let bytes_used = - usize::try_from(bytes_used).map_err(|e| VideoError::BackendFailure(anyhow!(e)))?; - - let offset = usize::try_from(offset).map_err(|e| VideoError::BackendFailure(anyhow!(e)))?; - - let bitstream_map: BufferMapping<_, GuestResourceHandle> = - BufferMapping::new(resource, offset, bytes_used)?; - let frame = self - .parser - .parse_frame(bitstream_map.as_ref()) - .map_err(|e| VideoError::BackendFailure(anyhow!(e)))?; - - self.handle_frame(frame, timestamp) - } - - fn flush(&mut self) -> Result> { - self.wait_keyframe = true; - - // VP8 has no internal picture queue, so simply return nothing here. - Ok(vec![]) - } - - fn va_image_fmt(&self) -> &Option { - &self.image_fmt - } - - fn set_raw_fmt(&mut self, format: Format) -> Result<()> { - let image_formats = self.metadata_state.display().query_image_formats()?; - - //TODO: this is hardcoded to NV12 for now. Will change when a proper - //Format is implemented in the libva crate so we can use TryFrom. - let image_fmt = image_formats - .into_iter() - .find(|f| f.fourcc == libva::constants::VA_FOURCC_NV12) - .with_context(|| format!("unsupported format {}", format))?; - - self.image_fmt = Some(image_fmt); - - Ok(()) - } - - fn drc(&mut self) -> Option { - if self.drc { - self.drc = false; - - Some(DrcParams { - min_num_buffers: NUM_SURFACES, - width: self.resolution.width, - height: self.resolution.height, - visible_rect: Rect { - left: 0, - top: 0, - right: self.resolution.width as i32, - bottom: self.resolution.height as i32, - }, - }) - } else { - None - } - } -} - -#[cfg(test)] -mod tests { - use std::io::Cursor; - use std::io::Read; - use std::io::Seek; - - use base::FromRawDescriptor; - use base::SafeDescriptor; - use base::SharedMemory; - use bytes::Buf; - use libva::BufferType; - use libva::IQMatrix; - use libva::PictureParameter; - use libva::SliceParameter; - - use crate::virtio::video::decoder::backend::vaapi::tests::build_resource; - use crate::virtio::video::decoder::backend::vaapi::vp8::Vp8Codec; - use crate::virtio::video::decoder::backend::vaapi::vp8::NUM_SURFACES; - use crate::virtio::video::decoder::backend::vaapi::VaapiDecoder; - use crate::virtio::video::decoder::backend::vaapi::VaapiDecoderSession; - use crate::virtio::video::decoder::backend::DecoderBackend; - use crate::virtio::video::decoder::backend::DecoderEvent; - use crate::virtio::video::decoder::backend::DecoderSession; - use crate::virtio::video::format::Format; - use crate::virtio::video::format::FramePlane; - use crate::virtio::video::format::Rect; - use crate::virtio::video::resource::GuestMemArea; - use crate::virtio::video::resource::GuestMemHandle; - use crate::virtio::video::resource::GuestResource; - use crate::virtio::video::resource::GuestResourceHandle; - - fn get_codec(session: &mut VaapiDecoderSession) -> &mut Vp8Codec { - session.codec.as_mut().downcast_mut::().unwrap() - } - - /// Read and return the data from the next IVF packet. Returns `None` if there is no more data - /// to read. - fn read_ivf_packet(cursor: &mut Cursor<&[u8]>) -> Option> { - if !cursor.has_remaining() { - return None; - } - - let len = cursor.get_u32_le(); - // Skip PTS. - let _ = cursor.get_u64_le(); - - let mut buf = vec![0u8; len as usize]; - cursor.read_exact(&mut buf).unwrap(); - - Some(buf.into_boxed_slice()) - } - - #[test] - // Ignore this test by default as it requires libva-compatible hardware. - #[ignore] - fn test_25fps_vp8() { - // Test video stream and its properties. Compare the parameters for frames - // 0,1, 2, and make sure the rest does not fail by unwraping the result - // of codec.handle_frame() - const TEST_25_FPS_VP8_STREAM: &[u8] = include_bytes!("test-25fps.vp8"); - const TEST_25_FPS_VP8_STREAM_WIDTH: i32 = 320; - const TEST_25_FPS_VP8_STREAM_HEIGHT: i32 = 240; - const NUM_BUFS: u32 = NUM_SURFACES as u32; - - // Extracted using "LIBVA_TRACE=libva LIBVA_TRACE_BUFDATA=1 gst-launch-1.0 - // filesrc location=test-25fps.vp8 ! parsebin ! vavp8dec ! fakevideosink" - // A couple frames worth of data should make it easier spot parser/decoder - // issues in contrast with using only a crc check - const TEST_25_FPS_VP8_STREAM_SLICE_DATA_0: &[u8] = - include_bytes!("test-25fps-vp8-slice-data-0.bin"); - const TEST_25_FPS_VP8_STREAM_SLICE_DATA_1: &[u8] = - include_bytes!("test-25fps-vp8-slice-data-1.bin"); - const TEST_25_FPS_VP8_STREAM_SLICE_DATA_2: &[u8] = - include_bytes!("test-25fps-vp8-slice-data-2.bin"); - - const TEST_25_FPS_VP8_STREAM_PROBABILITY_TABLE_0: &[u8] = - include_bytes!("test-25fps-vp8-probability-table-0.bin"); - const TEST_25_FPS_VP8_STREAM_PROBABILITY_TABLE_1: &[u8] = - include_bytes!("test-25fps-vp8-probability-table-1.bin"); - const TEST_25_FPS_VP8_STREAM_PROBABILITY_TABLE_2: &[u8] = - include_bytes!("test-25fps-vp8-probability-table-2.bin"); - - const VP8_STREAM_CRCS: &str = include_str!("test-25fps.vp8.crc"); - let mut expected_frames_crcs = VP8_STREAM_CRCS.lines(); - - let mut cursor = Cursor::new(TEST_25_FPS_VP8_STREAM); - // Confirm the width and height of the stream. - cursor.seek(std::io::SeekFrom::Start(12)).unwrap(); - let w = cursor.get_u16_le(); - let h = cursor.get_u16_le(); - assert!(w as i32 == TEST_25_FPS_VP8_STREAM_WIDTH); - assert!(h as i32 == TEST_25_FPS_VP8_STREAM_HEIGHT); - - // Skip the IVH header entirely. - cursor.seek(std::io::SeekFrom::Start(32)).unwrap(); - - let mut decoder = VaapiDecoder::new().unwrap(); - let mut session = decoder.new_session(Format::VP8).unwrap(); - - // Output buffers suitable for receiving NV12 frames for our stream. - let output_buffers = (0..NUM_BUFS) - .into_iter() - .map(|_| { - SharedMemory::new( - "", - (TEST_25_FPS_VP8_STREAM_WIDTH * TEST_25_FPS_VP8_STREAM_HEIGHT * 3 / 2) as u64, - ) - .unwrap() - }) - .collect::>(); - - let mut frame_num = 0; - while let Some(packet) = read_ivf_packet(&mut cursor) { - session - .decode( - 0, - frame_num as u64, - build_resource(packet.as_ref()), - 0, - packet.len() as u32, - ) - .unwrap(); - - // After sending the first buffer we should get the initial - // resolution change event and can provide the frames to decode - // into. - if frame_num == 0 { - assert!(session.event_queue.len() == 2); - - // Done with input buffer 0 and Waiting for output buffers. - assert!(matches!( - session.read_event().unwrap(), - DecoderEvent::ProvidePictureBuffers { - min_num_buffers: NUM_BUFS, - width: TEST_25_FPS_VP8_STREAM_WIDTH, - height: TEST_25_FPS_VP8_STREAM_HEIGHT, - visible_rect: Rect { - left: 0, - top: 0, - right: TEST_25_FPS_VP8_STREAM_WIDTH, - bottom: TEST_25_FPS_VP8_STREAM_HEIGHT, - }, - } | DecoderEvent::NotifyEndOfBitstreamBuffer(0) - )); - - assert!(matches!( - session.read_event().unwrap(), - DecoderEvent::ProvidePictureBuffers { - min_num_buffers: NUM_BUFS, - width: TEST_25_FPS_VP8_STREAM_WIDTH, - height: TEST_25_FPS_VP8_STREAM_HEIGHT, - visible_rect: Rect { - left: 0, - top: 0, - right: TEST_25_FPS_VP8_STREAM_WIDTH, - bottom: TEST_25_FPS_VP8_STREAM_HEIGHT, - }, - } | DecoderEvent::NotifyEndOfBitstreamBuffer(0) - )); - - session - .set_output_parameters(NUM_BUFS as usize, Format::NV12) - .unwrap(); - - // Pass the buffers we will decode into. - for (picture_buffer_id, buffer) in output_buffers.iter().enumerate() { - let handle = GuestResourceHandle::GuestPages(GuestMemHandle { - // Safe because we are taking ownership of a just-duplicated FD. - desc: unsafe { - SafeDescriptor::from_raw_descriptor( - base::clone_descriptor(buffer).unwrap(), - ) - }, - mem_areas: vec![GuestMemArea { - offset: 0, - length: buffer.size() as usize, - }], - }); - - session - .use_output_buffer( - picture_buffer_id as i32, - GuestResource { - handle, - planes: vec![ - FramePlane { - offset: 0, - stride: TEST_25_FPS_VP8_STREAM_WIDTH as usize, - size: (TEST_25_FPS_VP8_STREAM_WIDTH - * TEST_25_FPS_VP8_STREAM_HEIGHT) - as usize, - }, - FramePlane { - offset: (TEST_25_FPS_VP8_STREAM_WIDTH - * TEST_25_FPS_VP8_STREAM_HEIGHT) - as usize, - stride: TEST_25_FPS_VP8_STREAM_WIDTH as usize, - size: (TEST_25_FPS_VP8_STREAM_WIDTH - * TEST_25_FPS_VP8_STREAM_HEIGHT - / 2) - as usize, - }, - ], - width: TEST_25_FPS_VP8_STREAM_WIDTH as u32, - height: TEST_25_FPS_VP8_STREAM_HEIGHT as u32, - format: Format::NV12, - }, - ) - .unwrap(); - } - } - - let codec = get_codec(&mut session); - let params = &codec.params; - let pic_param = match params.pic_param { - Some(BufferType::PictureParameter(PictureParameter::VP8(ref pic_param))) => { - pic_param - } - _ => panic!(), - }; - - let slice_param = match params.slice_param { - Some(BufferType::SliceParameter(SliceParameter::VP8(ref slice_param))) => { - slice_param - } - _ => panic!(), - }; - - let slice_data = match params.slice_data { - Some(BufferType::SliceData(ref data)) => data, - _ => panic!(), - }; - - let iq_matrix = match params.iq_matrix { - Some(BufferType::IQMatrix(IQMatrix::VP8(ref iq_matrix))) => iq_matrix, - _ => panic!(), - }; - - let probability_table = match params.probability_table { - Some(BufferType::Probability(ref probability_table)) => probability_table, - _ => panic!(), - }; - - let last_pic = params.last_pic.as_ref().unwrap(); - - // Uncomment to dump the YUV output to /tmp - // VaapiDecoderSession::get_test_nv12( - // codec.metadata_state.display(), - // last_pic.picture(), - // 320, - // 240, - // |nv12| { - // std::fs::write( - // format!("/tmp/{}_frame{}.yuv", "test_25fps.vp8", frame_num), - // nv12, - // ) - // .unwrap(); - // }, - // ); - - let frame_crc = VaapiDecoderSession::get_test_nv12( - codec.metadata_state.display(), - last_pic.picture(), - 320, - 240, - crc32fast::hash, - ); - assert_eq!( - format!("{:08x}", frame_crc), - expected_frames_crcs - .next() - .expect("No CRC for decoded frame") - ); - - if frame_num == 0 { - assert_eq!(iq_matrix.inner().quantization_index, [[4; 6]; 4]); - for i in 0..4 { - for j in 0..8 { - for k in 0..3 { - for l in 0..11 { - const OFF_I: usize = 8 * 3 * 11; - const OFF_J: usize = 3 * 11; - const OFF_K: usize = 11; - // maybe std::transmute? - assert_eq!( - probability_table.inner().dct_coeff_probs[i][j][k][l], - TEST_25_FPS_VP8_STREAM_PROBABILITY_TABLE_0 - [(i * OFF_I) + (j * OFF_J) + (k * OFF_K) + l] - ); - } - } - } - } - - assert_eq!(pic_param.inner().frame_width, 320); - assert_eq!(pic_param.inner().frame_height, 240); - assert_eq!( - pic_param.inner().last_ref_frame, - libva::constants::VA_INVALID_SURFACE - ); - assert_eq!( - pic_param.inner().golden_ref_frame, - libva::constants::VA_INVALID_SURFACE - ); - assert_eq!( - pic_param.inner().alt_ref_frame, - libva::constants::VA_INVALID_SURFACE - ); - assert_eq!( - pic_param.inner().out_of_loop_frame, - libva::constants::VA_INVALID_SURFACE - ); - - // Safe because this bitfield is initialized by the decoder. - assert_eq!(unsafe { pic_param.inner().pic_fields.value }, unsafe { - libva::VP8PicFields::new(0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1) - .inner() - .value - }); - - assert_eq!(pic_param.inner().mb_segment_tree_probs, [0; 3]); - assert_eq!(pic_param.inner().loop_filter_level, [0; 4]); - assert_eq!( - pic_param.inner().loop_filter_deltas_ref_frame, - [2, 0, -2, -2] - ); - assert_eq!(pic_param.inner().loop_filter_deltas_mode, [4, -2, 2, 4]); - assert_eq!(pic_param.inner().prob_skip_false, 0xbe); - assert_eq!(pic_param.inner().prob_intra, 0); - assert_eq!(pic_param.inner().prob_last, 0); - assert_eq!(pic_param.inner().prob_gf, 0); - - assert_eq!(pic_param.inner().y_mode_probs, [0x91, 0x9c, 0xa3, 0x80]); - assert_eq!(pic_param.inner().uv_mode_probs, [0x8e, 0x72, 0xb7]); - assert_eq!( - pic_param.inner().mv_probs[0], - [ - 0xa2, 0x80, 0xe1, 0x92, 0xac, 0x93, 0xd6, 0x27, 0x9c, 0x80, 0x81, 0x84, - 0x4b, 0x91, 0xb2, 0xce, 0xef, 0xfe, 0xfe - ] - ); - assert_eq!( - pic_param.inner().mv_probs[1], - [ - 0xa4, 0x80, 0xcc, 0xaa, 0x77, 0xeb, 0x8c, 0xe6, 0xe4, 0x80, 0x82, 0x82, - 0x4a, 0x94, 0xb4, 0xcb, 0xec, 0xfe, 0xfe, - ] - ); - - assert_eq!(pic_param.inner().bool_coder_ctx.range, 0xfc); - assert_eq!(pic_param.inner().bool_coder_ctx.value, 0x39); - assert_eq!(pic_param.inner().bool_coder_ctx.count, 0x0); - - assert_eq!( - slice_param.inner(), - libva::SliceParameterBufferVP8::new( - 14788, - 10, - 0, - 3040, - 2, - [926, 13472, 0, 0, 0, 0, 0, 0, 0], - ) - .inner(), - ); - - assert_eq!(&slice_data[..], TEST_25_FPS_VP8_STREAM_SLICE_DATA_0); - } else if frame_num == 1 { - assert_eq!(iq_matrix.inner().quantization_index, [[0x7f; 6]; 4]); - for i in 0..4 { - for j in 0..8 { - for k in 0..3 { - for l in 0..11 { - const OFF_I: usize = 8 * 3 * 11; - const OFF_J: usize = 3 * 11; - const OFF_K: usize = 11; - // maybe std::transmute? - assert_eq!( - probability_table.inner().dct_coeff_probs[i][j][k][l], - TEST_25_FPS_VP8_STREAM_PROBABILITY_TABLE_1 - [(i * OFF_I) + (j * OFF_J) + (k * OFF_K) + l] - ); - } - } - } - } - assert_eq!(pic_param.inner().frame_width, 320); - assert_eq!(pic_param.inner().frame_height, 240); - assert_eq!(pic_param.inner().last_ref_frame, 0); - assert_eq!(pic_param.inner().golden_ref_frame, 0); - assert_eq!(pic_param.inner().alt_ref_frame, 0); - assert_eq!( - pic_param.inner().out_of_loop_frame, - libva::constants::VA_INVALID_SURFACE - ); - - // Safe because this bitfield is initialized by the decoder. - assert_eq!(unsafe { pic_param.inner().pic_fields.value }, unsafe { - libva::VP8PicFields::new(1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0) - .inner() - .value - }); - - assert_eq!(pic_param.inner().mb_segment_tree_probs, [0; 3]); - assert_eq!(pic_param.inner().loop_filter_level, [44; 4]); - assert_eq!( - pic_param.inner().loop_filter_deltas_ref_frame, - [2, 0, -2, -2] - ); - assert_eq!(pic_param.inner().loop_filter_deltas_mode, [4, -2, 2, 4]); - assert_eq!(pic_param.inner().prob_skip_false, 0x11); - assert_eq!(pic_param.inner().prob_intra, 0x2a); - assert_eq!(pic_param.inner().prob_last, 0xff); - assert_eq!(pic_param.inner().prob_gf, 0x80); - - assert_eq!(pic_param.inner().y_mode_probs, [0x70, 0x56, 0x8c, 0x25]); - assert_eq!(pic_param.inner().uv_mode_probs, [0xa2, 0x65, 0xcc]); - assert_eq!( - pic_param.inner().mv_probs[0], - [ - 0xa2, 0x80, 0xe1, 0x92, 0xac, 0x93, 0xd6, 0x27, 0x9c, 0x80, 0x81, 0x84, - 0x4b, 0x91, 0xb2, 0xce, 0xef, 0xfe, 0xfe, - ] - ); - assert_eq!( - pic_param.inner().mv_probs[1], - [ - 0xa4, 0x80, 0xcc, 0xaa, 0x77, 0xeb, 0x8c, 0xe6, 0xe4, 0x80, 0x82, 0x82, - 0x4a, 0x94, 0xb4, 0xcb, 0xec, 0xfe, 0xfe, - ] - ); - - assert_eq!(pic_param.inner().bool_coder_ctx.range, 0xde); - assert_eq!(pic_param.inner().bool_coder_ctx.value, 0x39); - assert_eq!(pic_param.inner().bool_coder_ctx.count, 0x7); - - assert_eq!( - slice_param.inner(), - libva::SliceParameterBufferVP8::new( - 257, - 3, - 0, - 129, - 2, - [143, 94, 0, 0, 0, 0, 0, 0, 0], - ) - .inner() - ); - - assert_eq!(&slice_data[..], TEST_25_FPS_VP8_STREAM_SLICE_DATA_1); - } else if frame_num == 2 { - assert_eq!(iq_matrix.inner().quantization_index, [[0x7f; 6]; 4]); - for i in 0..4 { - for j in 0..8 { - for k in 0..3 { - for l in 0..11 { - const OFF_I: usize = 8 * 3 * 11; - const OFF_J: usize = 3 * 11; - const OFF_K: usize = 11; - // maybe std::transmute? - assert_eq!( - probability_table.inner().dct_coeff_probs[i][j][k][l], - TEST_25_FPS_VP8_STREAM_PROBABILITY_TABLE_2 - [(i * OFF_I) + (j * OFF_J) + (k * OFF_K) + l] - ); - } - } - } - } - assert_eq!(pic_param.inner().frame_width, 320); - assert_eq!(pic_param.inner().frame_height, 240); - assert_eq!(pic_param.inner().last_ref_frame, 1); - assert_eq!(pic_param.inner().golden_ref_frame, 0); - assert_eq!(pic_param.inner().alt_ref_frame, 0); - assert_eq!( - pic_param.inner().out_of_loop_frame, - libva::constants::VA_INVALID_SURFACE - ); - - // Safe because this bitfield is initialized by the decoder. - assert_eq!(unsafe { pic_param.inner().pic_fields.value }, unsafe { - libva::VP8PicFields::new(1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0) - .inner() - .value - }); - - assert_eq!(pic_param.inner().mb_segment_tree_probs, [0; 3]); - assert_eq!(pic_param.inner().loop_filter_level, [28; 4]); - assert_eq!( - pic_param.inner().loop_filter_deltas_ref_frame, - [2, 0, -2, -2] - ); - assert_eq!(pic_param.inner().loop_filter_deltas_mode, [4, -2, 2, 4]); - assert_eq!(pic_param.inner().prob_skip_false, 0x6); - assert_eq!(pic_param.inner().prob_intra, 0x1); - assert_eq!(pic_param.inner().prob_last, 0xf8); - assert_eq!(pic_param.inner().prob_gf, 0xff); - - assert_eq!(pic_param.inner().y_mode_probs, [0x70, 0x56, 0x8c, 0x25]); - assert_eq!(pic_param.inner().uv_mode_probs, [0xa2, 0x65, 0xcc]); - assert_eq!( - pic_param.inner().mv_probs[0], - [ - 0xa2, 0x80, 0xe1, 0x92, 0xac, 0x93, 0xd6, 0x27, 0x9c, 0x80, 0x81, 0x84, - 0x4b, 0x91, 0xb2, 0xce, 0xef, 0xfe, 0xfe, - ] - ); - assert_eq!( - pic_param.inner().mv_probs[1], - [ - 0xa4, 0x80, 0xcc, 0xaa, 0x77, 0xeb, 0x8c, 0xe6, 0xe4, 0x80, 0x82, 0x82, - 0x4a, 0x94, 0xb4, 0xcb, 0xec, 0xfe, 0xfe, - ] - ); - - assert_eq!(pic_param.inner().bool_coder_ctx.range, 0xb1); - assert_eq!(pic_param.inner().bool_coder_ctx.value, 0xd); - assert_eq!(pic_param.inner().bool_coder_ctx.count, 0x2); - - assert_eq!( - slice_param.inner(), - libva::SliceParameterBufferVP8::new( - 131, - 3, - 0, - 86, - 2, - [66, 51, 0, 0, 0, 0, 0, 0, 0], - ) - .inner() - ); - - assert_eq!(&slice_data[..], TEST_25_FPS_VP8_STREAM_SLICE_DATA_2); - } - - // Assume for the purposes of this test that the output buffer can - // be reused, otherwise we are going to run out - let _ = session.reuse_output_buffer(frame_num as i32 % NUM_BUFS as i32); - frame_num += 1; - } - } -} diff --git a/media/vp8/Cargo.toml b/media/vp8/Cargo.toml deleted file mode 100644 index efedec11bc..0000000000 --- a/media/vp8/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "vp8" -version = "0.1.0" -authors = ["The Chromium OS Authors"] -edition = "2021" - -[dependencies] -anyhow = "*" -bytes = "1.1.0" -log = { version = "0", features = ["release_max_level_debug"]} diff --git a/media/vp8/src/bool_decoder.rs b/media/vp8/src/bool_decoder.rs deleted file mode 100644 index 424a4be761..0000000000 --- a/media/vp8/src/bool_decoder.rs +++ /dev/null @@ -1,270 +0,0 @@ -// Copyright 2022 The ChromiumOS Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -/// A VP8 boolean decoder based on the implementation in Chromium and GStreamer. -use std::convert::TryFrom; -/// A VP8 boolean decoder based on the implementation in Chromium and GStreamer. -use std::io::Cursor; - -use anyhow::anyhow; -use anyhow::Result; -use bytes::Buf; - -const LOTS_OF_BITS: u32 = 0x40000000; -const U8_BITS: usize = u8::BITS as usize; -const BD_VALUE_SIZE: usize = std::mem::size_of::() * U8_BITS; - -const NORM: [u8; 256] = [ - 0, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -]; - -/// Some bits are "encoded" with a 50/50 probability. -const DEFAULT_PROBABILITY: u8 = 128; - -/// The decoder state. -#[derive(Default)] -pub struct BoolDecoder { - data: Cursor, - range: usize, - value: usize, - count: isize, -} - -impl> BoolDecoder { - /// Creates a new instance. - pub fn new(data: T) -> Self { - Self { - data: Cursor::new(data), - range: 255usize, - value: 0usize, - count: -8, - } - } - - /// Fills more bits from `data` to `value`. We shall keep at least 8 bits of - /// the current `data` in `value`. - fn fill(&mut self) -> Result<()> { - let mut shift = - (BD_VALUE_SIZE as isize - U8_BITS as isize - (self.count + U8_BITS as isize)) as i32; - let bits_left = (self.data.remaining() * U8_BITS) as i32; - let x = shift + U8_BITS as i32 - bits_left; - let mut loop_end = 0; - - if x >= 0 { - self.count += LOTS_OF_BITS as isize; - loop_end = x; - } - - if x < 0 || bits_left != 0 { - while shift >= loop_end { - self.count += U8_BITS as isize; - self.value |= (self.data.get_u8() as usize) << shift; - shift -= U8_BITS as i32; - } - Ok(()) - } else { - Err(anyhow!("Out of bits")) - } - } - - /// Reads the next bit from the coded stream. The probability of the bit to - /// be one is probability / 256. - fn read_bit(&mut self, probability: u8) -> Result { - let split = 1 + (((self.range - 1) * probability as usize) >> 8); - - if self.count < 0 { - self.fill()?; - } - - let bigsplit = split << (BD_VALUE_SIZE - U8_BITS); - - let bit = if self.value >= bigsplit { - self.range -= split; - self.value -= bigsplit; - true - } else { - self.range = split; - false - }; - - let shift = NORM[self.range]; - self.range <<= shift; - self.value <<= shift; - self.count -= isize::from(shift); - - Ok(bit) - } - - /// Reads a "literal", that is, a "num_bits"-wide unsigned value whose bits - /// come high- to low-order, with each bit encoded at probability 1/2. - fn read_literal(&mut self, mut nbits: usize) -> Result { - let mut ret = 0; - - while nbits > 0 { - let bit = self.read_bit(DEFAULT_PROBABILITY)?; - ret = (ret << 1) | bit as i32; - nbits -= 1; - } - - Ok(ret) - } - - /// Reads a boolean from the coded stream. Returns false if it has reached the - /// end of data and failed to read the boolean. The probability of out to - /// be true is probability / 256, e.g., when probability is 0x80, the - /// chance is 1/2 (i.e., 0x80 / 256). - pub fn read_bool(&mut self) -> Result { - self.read_literal(1).map(|bit| bit != 0) - } - - /// Reads a boolean from the coded stream. Returns false if it has reached the - /// end of data and failed to read the boolean. The probability of out to - /// be true is probability / 256, e.g., when probability is 0x80, the - /// chance is 1/2 (i.e., 0x80 / 256). - pub fn read_bool_with_prob(&mut self, probability: u8) -> Result { - self.read_bit(probability) - } - - /// Reads an unsigned literal from the coded stream. - pub fn read_uint>(&mut self, nbits: usize) -> Result { - let value = self.read_literal(nbits)?; - U::try_from(value).map_err(|_| anyhow!("Conversion failed")) - } - - /// Reads a literal with sign from the coded stream. This is similar to the - /// read_literal(), it first read a "num_bits"-wide unsigned value, and then - /// read an extra bit as the sign of the literal. - pub fn read_sint>(&mut self, nbits: usize) -> Result { - let mut value = self.read_literal(nbits)?; - let sign = self.read_bool()?; - - if sign { - value = -value; - } - - U::try_from(value).map_err(|_| anyhow!("Conversion failed")) - } - - /// Returns the current coded value. - pub fn value(&self) -> usize { - self.value >> (BD_VALUE_SIZE - U8_BITS) - } - - /// Returns the number of bytes in the `value` buffer. - pub fn count(&self) -> isize { - (U8_BITS as isize + self.count) % U8_BITS as isize - } - - /// Returns the range of the current coded value. - pub fn range(&self) -> usize { - self.range - } - - /// Returns the current bit position. - pub fn pos(&self) -> usize { - let mut bit_count = (self.count + 8) as usize; - - if bit_count > BD_VALUE_SIZE { - bit_count = std::cmp::max(0, bit_count - LOTS_OF_BITS as usize); - } - - let pos = self.data.position() as usize; - pos * U8_BITS - bit_count - } -} - -#[cfg(test)] -mod tests { - use super::*; - - const NUM_BITS_TO_TEST: usize = 100; - - /// 100 zeros with probability of 0x80. - const DATA_ZEROS_AND_EVEN_PROBABILITIES: [u8; 14] = [ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - ]; - - /// 100 ones with probability of 0x80. - const DATA_ONES_AND_EVEN_PROBABILITIES: [u8; 14] = [ - 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x20, - ]; - - /// [0, 1, 0, 1, ..., 1] with probability [0, 1, 2, 3, ..., 99]. - const DATA_PARITIES_AND_INCREASING_PROBABILITIES: [u8; 21] = [ - 0x00, 0x02, 0x08, 0x31, 0x8e, 0xca, 0xab, 0xe2, 0xc8, 0x31, 0x12, 0xb3, 0x2c, 0x19, 0x90, - 0xc6, 0x6a, 0xeb, 0x17, 0x52, 0x30, - ]; - - // All tests adapted from: - // https://chromium.googlesource.com/chromium/src/+/refs/heads/main/media/parsers/vp8_bool_decoder_unittest.cc - - #[test] - fn decode_bools_with_zeros_and_even_probabilities() { - let mut bd = BoolDecoder::new(&DATA_ZEROS_AND_EVEN_PROBABILITIES[..]); - assert!(bd.pos() == 0); - - for i in 0..NUM_BITS_TO_TEST { - assert!(!bd.read_bool_with_prob(0x80).unwrap()); - assert_eq!(i, bd.pos()); - } - } - - #[test] - fn decode_literals_with_zeros_and_even_probabilities() { - // Adapted from: - // https://chromium.googlesource.com/chromium/src/+/refs/heads/main/media/parsers/vp8_bool_decoder_unittest.cc - let mut bd = BoolDecoder::new(&DATA_ZEROS_AND_EVEN_PROBABILITIES[..]); - assert!(bd.pos() == 0); - - assert!(bd.read_literal(1).unwrap() == 0); - assert!(bd.read_literal(32).unwrap() == 0); - assert!(bd.read_sint::(1).unwrap() == 0); - assert!(bd.read_sint::(31).unwrap() == 0); - } - - #[test] - fn decode_bools_with_ones_and_even_probabilities() { - let mut bd = BoolDecoder::new(&DATA_ONES_AND_EVEN_PROBABILITIES[..]); - assert!(bd.pos() == 0); - - for i in 0..NUM_BITS_TO_TEST { - assert!(bd.read_bool_with_prob(0x80).unwrap()); - assert_eq!(i + 1, bd.pos()); - } - } - - #[test] - fn decode_literals_with_ones_and_even_probabilities() { - let mut bd = BoolDecoder::new(&DATA_ONES_AND_EVEN_PROBABILITIES[..]); - assert!(bd.pos() == 0); - - assert!(bd.read_literal(1).unwrap() == 1); - assert!(bd.read_literal(31).unwrap() == 0x7fffffff); - assert!(bd.read_sint::(1).unwrap() == -1); - assert!(bd.read_sint::(31).unwrap() == -0x7fffffff); - } - - #[test] - fn decode_bools_with_parities_and_increasing_probabilities() { - let mut bd = BoolDecoder::new(&DATA_PARITIES_AND_INCREASING_PROBABILITIES[..]); - assert!(bd.pos() == 0); - - for i in 0..NUM_BITS_TO_TEST { - let bit = bd.read_bool_with_prob(i as u8).unwrap(); - - if i % 2 == 0 { - assert!(!bit); - } else { - assert!(bit); - } - } - } -} diff --git a/media/vp8/src/lib.rs b/media/vp8/src/lib.rs deleted file mode 100644 index 6f6b7c9ced..0000000000 --- a/media/vp8/src/lib.rs +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2022 The ChromiumOS Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -mod bool_decoder; -pub mod parser; -mod probs; diff --git a/media/vp8/src/parser.rs b/media/vp8/src/parser.rs deleted file mode 100644 index 4aa5944ff5..0000000000 --- a/media/vp8/src/parser.rs +++ /dev/null @@ -1,902 +0,0 @@ -// Copyright 2022 The ChromiumOS Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -use std::convert::TryFrom; -use std::io::Cursor; - -use anyhow::anyhow; -use anyhow::Result; -use bytes::Buf; -use log::debug; - -use crate::bool_decoder::BoolDecoder; -use crate::probs::COEFF_DEFAULT_PROBS; -use crate::probs::COEFF_UPDATE_PROBS; -use crate::probs::KF_UV_MODE_PROBS; -use crate::probs::KF_Y_MODE_PROBS; -use crate::probs::MV_DEFAULT_PROBS; -use crate::probs::MV_UPDATE_PROBS; -use crate::probs::NK_UV_MODE_PROBS; -use crate::probs::NK_Y_MODE_PROBS; - -/// Dequantization indices as parsed from the quant_indices() syntax. -#[derive(Clone, Default)] -pub struct QuantIndices { - /// The dequantization table index used for the luma AC coefficients (and - /// other coefficient groups if no delta value is present). - pub y_ac_qi: u8, - /// Indicates the delta value that is added to the baseline index to obtain - /// the luma DC coefficient dequantization index. - pub y_dc_delta: i8, - /// Indicates the delta value that is added to the baseline index to obtain - /// the Y2 block DC coefficient dequantization index. - pub y2_dc_delta: i8, - /// Indicates the delta value that is added to the baseline index to obtain - /// the Y2 block AC coefficient dequantization index. - pub y2_ac_delta: i8, - /// Indicates the delta value that is added to the baseline index to obtain - /// the chroma DC coefficient dequantization index. - pub uv_dc_delta: i8, - /// Indicates the delta value that is added to the baseline index to obtain - /// the chroma AC coefficient dequantization index. - pub uv_ac_delta: i8, -} - -#[derive(Clone, Default)] -pub struct MbLfAdjustments { - /// Indicates if the MB-level loop filter adjustment (based on the used - /// reference frame and coding mode) is on for the current frame. - pub loop_filter_adj_enable: bool, - /// Indicates if the delta values used in adjustment are updated in the - /// current frame. - pub mode_ref_lf_delta_update: bool, - - //if mode_ref_lf_delta_update == 1 - /// Indicates the adjustment delta value corresponding to a certain used - /// reference frame. - pub ref_frame_delta: [i8; 4], - /// Indicates the adjustment delta value corresponding to a certain MB - /// prediction mode - pub mb_mode_delta: [i8; 4], -} - -#[derive(Clone, Default)] -pub struct Segmentation { - /// Enables the segmentation feature for the current frame. - pub segmentation_enabled: bool, - /// Determines if the MB segmentation map is updated in the current frame. - pub update_mb_segmentation_map: bool, - /// indicates if the segment feature data is updated in the current frame. - pub update_segment_feature_data: bool, - - // If update_segment_feature_data == 1 - /// Indicates the feature data update mode, O for delta and 1 for the - /// absolute value. - pub segment_feature_mode: bool, - /// Indicates if the quantizer value is updated for the izh segment. - pub quantizer_update_value: [i8; 4], - /// Indicates the update value for the loop filter level. - pub lf_update_value: [i8; 4], - - // if update_mb_segmentation_map == 1 - /// The branch probabilities of the segment id decoding tree. - pub segment_prob: [u8; 3], -} - -#[derive(Default, Copy, Clone)] -pub struct ModeProbs { - /// Branch probabilities of the luma intra prediction mode decoding tree, - /// kept live between frames. - pub intra_16x16_prob: [u8; 4], - /// Branch probabilities of the chroma intra prediction mode decoding tree, - /// kept live between frames. - pub intra_chroma_prob: [u8; 3], -} - -#[derive(Clone, Default)] -pub struct Header { - /// Indicates if the current frame is a key frame or not. - key_frame: bool, - /// Determines the bitstream version. - version: u8, - /// Indicates if the current frame is meant to be displayed or not. - show_frame: bool, - /// The size in bytes of the Uncompressed Data Chunk - data_chunk_size: u8, - /// Determines the size of the first partition (control partition) excluding - /// the size of the Uncompressed Data Chunk - first_part_size: u32, - - /// The frame's width, in pixels. - width: u16, - /// The frame's height, in pixels. - height: u16, - /// Horizontal scale code value. - horiz_scale_code: u8, - /// Vertical scale code value. - vert_scale_code: u8, - /// Defines the YUV color space of the sequence. - color_space: bool, - /// Specifies if the decoder is required to clamp the reconstructed pixel - /// values. - clamping_type: bool, - /// Determines whether the normal or the simple loop filter is used. - filter_type: bool, - /// Controls the deblocking filter. - loop_filter_level: u8, - /// Controls the deblocking filter. - sharpness_level: u8, - /// Determines the number of separate partitions containing the DCT - /// coefficients of the macroblocks. - log2_nbr_of_dct_partitions: u8, - - partition_size: [u32; 8], - - /// Dequantizer indices. - quant_indices: QuantIndices, - - /// Determines whether updated token probabilities are used only for this - /// frame or until further update - refresh_entropy_probs: bool, - /// Determines if the current decoded frame refreshes the last frame - /// reference buffer - refresh_last: bool, - - /// Determines if the current decoded frame refreshes the golden frame. - refresh_golden_frame: bool, - /// Determines if the current decoded frame refreshes the alternate - /// reference frame. - refresh_alternate_frame: bool, - /// Determines if the golden reference is replaced by another reference. - copy_buffer_to_golden: u8, - /// Determines if the alternate reference is replaced by another reference. - copy_buffer_to_alternate: u8, - /// Controls the sign of motion vectors when the golden frame is referenced. - sign_bias_golden: bool, - /// Controls the sign of motion vectors when the alternate frame is - /// referenced. - sign_bias_alternate: bool, - - /// The new branch probability for the DCT/WHT tree. - coeff_prob: [[[[u8; 11]; 3]; 8]; 4], - /// MV decoding probability. - mv_prob: [[u8; 19]; 2], - - /// Enables or disables the skipping of macroblocks containing no non-zero - /// coefficients. - mb_no_coeff_skip: bool, - /// The probability that the macroblock is not skipped (flag indicating - /// skipped macroblock is false). - prob_skip_false: u8, - /// The probability of an intra macroblock. - prob_intra: u8, - /// The probability that the last reference frame is used for inter - /// prediction. - prob_last: u8, - /// The probability that the golden reference frame is used for inter - /// prediction. - prob_golden: u8, - /// Branch probabilities kept live across frames. - mode_probs: ModeProbs, - - /// Boolean decoder `range` for this frame. - bd_range: usize, - /// Boolean decoder `value` for this frame. - bd_value: usize, - /// Boolean decoder `count` for this frame. - bd_count: isize, - - /// The size in bits of the Frame Header, thus excluding any Uncompressed - /// Data Chunk bytes. - header_size: u32, -} - -#[allow(dead_code)] -impl Header { - /// Get a reference to the header's key frame. - pub fn key_frame(&self) -> bool { - self.key_frame - } - - /// Get a reference to the header's version. - pub fn version(&self) -> u8 { - self.version - } - - /// Get a reference to the header's show frame. - pub fn show_frame(&self) -> bool { - self.show_frame - } - - /// Get a reference to the header's data chunk size. - pub fn data_chunk_size(&self) -> u8 { - self.data_chunk_size - } - - /// Get a reference to the header's first part size. - pub fn first_part_size(&self) -> u32 { - self.first_part_size - } - - /// Get a reference to the header's width. - pub fn width(&self) -> u16 { - self.width - } - - /// Get a reference to the header's height. - pub fn height(&self) -> u16 { - self.height - } - - /// Get a reference to the header's horiz scale code. - pub fn horiz_scale_code(&self) -> u8 { - self.horiz_scale_code - } - - /// Get a reference to the header's vert scale code. - pub fn vert_scale_code(&self) -> u8 { - self.vert_scale_code - } - - /// Get a reference to the header's color space. - pub fn color_space(&self) -> bool { - self.color_space - } - - /// Get a reference to the header's clamping type. - pub fn clamping_type(&self) -> bool { - self.clamping_type - } - - /// Get a reference to the header's filter type. - pub fn filter_type(&self) -> bool { - self.filter_type - } - - /// Get a reference to the header's loop filter level. - pub fn loop_filter_level(&self) -> u8 { - self.loop_filter_level - } - - /// Get a reference to the header's sharpness level. - pub fn sharpness_level(&self) -> u8 { - self.sharpness_level - } - - /// Get a reference to the header's log2 nbr of dct partitions. - pub fn log2_nbr_of_dct_partitions(&self) -> u8 { - self.log2_nbr_of_dct_partitions - } - - /// Get a reference to the header's partition size. - pub fn partition_size(&self) -> [u32; 8] { - self.partition_size - } - - /// Get a reference to the header's quant indices. - pub fn quant_indices(&self) -> &QuantIndices { - &self.quant_indices - } - - /// Get a reference to the header's refresh entropy probs. - pub fn refresh_entropy_probs(&self) -> bool { - self.refresh_entropy_probs - } - - /// Get a reference to the header's refresh last. - pub fn refresh_last(&self) -> bool { - self.refresh_last - } - - /// Get a reference to the header's refresh golden frame. - pub fn refresh_golden_frame(&self) -> bool { - self.refresh_golden_frame - } - - /// Get a reference to the header's refresh alternate frame. - pub fn refresh_alternate_frame(&self) -> bool { - self.refresh_alternate_frame - } - - /// Get a reference to the header's copy buffer to golden. - pub fn copy_buffer_to_golden(&self) -> u8 { - self.copy_buffer_to_golden - } - - /// Get a reference to the header's copy buffer to alternate. - pub fn copy_buffer_to_alternate(&self) -> u8 { - self.copy_buffer_to_alternate - } - - /// Get a reference to the header's sign bias golden. - pub fn sign_bias_golden(&self) -> bool { - self.sign_bias_golden - } - - /// Get a reference to the header's sign bias alternate. - pub fn sign_bias_alternate(&self) -> bool { - self.sign_bias_alternate - } - - /// Get a reference to the header's coeff prob. - pub fn coeff_prob(&self) -> [[[[u8; 11]; 3]; 8]; 4] { - self.coeff_prob - } - - /// Get a reference to the header's mv prob. - pub fn mv_prob(&self) -> [[u8; 19]; 2] { - self.mv_prob - } - - /// Get a reference to the header's mb no coeff skip. - pub fn mb_no_coeff_skip(&self) -> bool { - self.mb_no_coeff_skip - } - - /// Get a reference to the header's prob skip false. - pub fn prob_skip_false(&self) -> u8 { - self.prob_skip_false - } - - /// Get a reference to the header's prob intra. - pub fn prob_intra(&self) -> u8 { - self.prob_intra - } - - /// Get a reference to the header's prob last. - pub fn prob_last(&self) -> u8 { - self.prob_last - } - - /// Get a reference to the header's prob golden. - pub fn prob_golden(&self) -> u8 { - self.prob_golden - } - - /// Get a reference to the header's mode probs. - pub fn mode_probs(&self) -> ModeProbs { - self.mode_probs - } - - /// Get a reference to the header's bd range. - pub fn bd_range(&self) -> usize { - self.bd_range - } - - /// Get a reference to the header's bd value. - pub fn bd_value(&self) -> usize { - self.bd_value - } - - /// Get a reference to the header's bd count. - pub fn bd_count(&self) -> isize { - self.bd_count - } - - /// Get a reference to the header's header size. - pub fn header_size(&self) -> u32 { - self.header_size - } -} -/// A VP8 frame. -pub struct Frame> { - /// The abstraction for the raw memory for this frame. - pub bitstream: T, - /// The frame header. - pub header: Header, -} - -impl> Frame { - /// Creates a new frame, using the resource as its backing memory. - fn new(bitstream: T) -> Self { - Self { - bitstream, - header: Default::default(), - } - } -} - -impl> AsRef<[u8]> for Frame { - fn as_ref(&self) -> &[u8] { - self.bitstream.as_ref() - } -} - -/// A VP8 parser based on GStreamer's vp8parser and Chromium's VP8 parser. -pub struct Parser { - /// Segmentation data kept live across frames. - segmentation: Segmentation, - /// MbLfAdjustments data kept live across frames. - mb_lf_adjust: MbLfAdjustments, - /// Coeff probabilities data kept live across frames. - coeff_prob: [[[[u8; 11]; 3]; 8]; 4], - /// Motion vector probabilities data kept live across frames. - mv_prob: [[u8; 19]; 2], - /// Branch probabilities kept live across frames. - mode_probs: ModeProbs, -} - -impl Parser { - pub fn segmentation(&self) -> &Segmentation { - &self.segmentation - } - - pub fn mb_lf_adjust(&self) -> &MbLfAdjustments { - &self.mb_lf_adjust - } - - pub fn reset(&mut self) { - *self = Default::default(); - } - - fn mode_probs_init_defaults(mode_probs: &mut ModeProbs, key_frame: bool) { - if key_frame { - mode_probs.intra_16x16_prob = KF_Y_MODE_PROBS; - mode_probs.intra_chroma_prob = KF_UV_MODE_PROBS; - } else { - mode_probs.intra_16x16_prob = NK_Y_MODE_PROBS; - mode_probs.intra_chroma_prob = NK_UV_MODE_PROBS; - } - } - - fn parse_uncompressed_data_chunk>( - &mut self, - reader: &mut Cursor, - frame: &mut Header, - ) -> Result<()> { - debug!("Parsing VP8 uncompressed data chunk."); - - let frame_tag = reader.get_uint_le(3) as u32; - - frame.key_frame = (frame_tag & 0x1) == 0; - frame.version = ((frame_tag >> 1) & 0x07) as u8; - frame.show_frame = ((frame_tag >> 4) & 0x1) != 0; - frame.first_part_size = (frame_tag >> 5) & 0x7ffff; - - if frame.key_frame { - let start_code = reader.get_uint(3) as u32; - - if start_code != 0x9d012a { - return Err(anyhow!("Invalid start code {}", start_code)); - } - - let size_code = reader.get_uint_le(2) as u16; - frame.horiz_scale_code = (size_code >> 14) as u8; - frame.width = size_code & 0x3fff; - - let size_code = reader.get_uint_le(2) as u16; - frame.vert_scale_code = (size_code >> 14) as u8; - frame.height = size_code & 0x3fff; - - // Reset on every key frame. - self.reset(); - } - - frame.data_chunk_size = reader.position() as u8; - Ok(()) - } - - fn update_segmentation>( - bd: &mut BoolDecoder, - seg: &mut Segmentation, - ) -> Result<()> { - seg.update_mb_segmentation_map = false; - seg.update_segment_feature_data = false; - - seg.segmentation_enabled = bd.read_bool()?; - if !seg.segmentation_enabled { - return Ok(()); - } - - seg.update_mb_segmentation_map = bd.read_bool()?; - seg.update_segment_feature_data = bd.read_bool()?; - - if seg.update_segment_feature_data { - seg.segment_feature_mode = bd.read_bool()?; - - for value in seg.quantizer_update_value.iter_mut() { - let update = bd.read_bool()?; - if update { - *value = bd.read_sint(7)?; - } else { - // quantizer_update_value defaults to zero if update flag is - // zero (Section 9.3, 4.b) - *value = 0; - } - } - - for value in seg.lf_update_value.iter_mut() { - let update = bd.read_bool()?; - if update { - *value = bd.read_sint(6)?; - } else { - // lf_update_value defaults to zero if update flag is - // zero (Section 9.3, 4.b) - *value = 0; - } - } - - if seg.update_mb_segmentation_map { - for value in seg.segment_prob.iter_mut() { - let update = bd.read_bool()?; - if update { - *value = bd.read_uint(8)?; - } else { - // segment_prob defaults to 255 if update flag is - // zero (Section 9.3, 5) - *value = 255; - } - } - } - } - - Ok(()) - } - - fn parse_mb_lf_adjustments>( - bd: &mut BoolDecoder, - adj: &mut MbLfAdjustments, - ) -> Result<()> { - adj.mode_ref_lf_delta_update = false; - - adj.loop_filter_adj_enable = bd.read_bool()?; - if !adj.loop_filter_adj_enable { - return Ok(()); - } - - adj.mode_ref_lf_delta_update = bd.read_bool()?; - if !adj.mode_ref_lf_delta_update { - return Ok(()); - } - - for value in adj.ref_frame_delta.iter_mut() { - let update = bd.read_bool()?; - if update { - *value = bd.read_sint(6)?; - } - } - - for value in adj.mb_mode_delta.iter_mut() { - let update = bd.read_bool()?; - if update { - *value = bd.read_sint(6)?; - } - } - - Ok(()) - } - - fn parse_quant_indices>( - bd: &mut BoolDecoder, - q: &mut QuantIndices, - ) -> Result<()> { - q.y_ac_qi = bd.read_uint(7)?; - - let y_dc_delta_present = bd.read_bool()?; - - if y_dc_delta_present { - q.y_dc_delta = bd.read_sint(4)?; - } else { - q.y_dc_delta = 0; - } - - let y2_dc_delta_present = bd.read_bool()?; - if y2_dc_delta_present { - q.y2_dc_delta = bd.read_sint(4)?; - } else { - q.y2_dc_delta = 0; - } - - let y2_ac_delta_present = bd.read_bool()?; - if y2_ac_delta_present { - q.y2_ac_delta = bd.read_sint(4)?; - } else { - q.y2_ac_delta = 0; - } - - let uv_dc_delta_present = bd.read_bool()?; - if uv_dc_delta_present { - q.uv_dc_delta = bd.read_sint(4)?; - } else { - q.uv_dc_delta = 0; - } - - let uv_ac_delta_present = bd.read_bool()?; - if uv_ac_delta_present { - q.uv_ac_delta = bd.read_sint(4)?; - } else { - q.uv_ac_delta = 0; - } - - Ok(()) - } - - fn parse_token_prob_update>( - bd: &mut BoolDecoder, - coeff_probs: &mut [[[[u8; 11]; 3]; 8]; 4], - ) -> Result<()> { - for (i, vi) in coeff_probs.iter_mut().enumerate() { - for (j, vj) in vi.iter_mut().enumerate() { - for (k, vk) in vj.iter_mut().enumerate() { - for (l, prob) in vk.iter_mut().enumerate() { - let update = bd.read_bool_with_prob(COEFF_UPDATE_PROBS[i][j][k][l])?; - if update { - *prob = bd.read_uint(8)?; - } - } - } - } - } - - Ok(()) - } - - fn parse_mv_prob_update>( - bd: &mut BoolDecoder, - mv_probs: &mut [[u8; 19]; 2], - ) -> Result<()> { - for (i, vi) in mv_probs.iter_mut().enumerate() { - for (j, prob) in vi.iter_mut().enumerate() { - let update = bd.read_bool_with_prob(MV_UPDATE_PROBS[i][j])?; - if update { - let mv_prob_update = bd.read_uint::(7)?; - - if mv_prob_update > 0 { - *prob = mv_prob_update << 1; - } else { - *prob = 1; - } - } - } - } - - Ok(()) - } - - fn parse_frame_header(&mut self, data: &[u8], frame: &mut Header) -> Result<()> { - debug!("Parsing VP8 frame header."); - let mut bd = BoolDecoder::new(data); - - if frame.key_frame { - frame.color_space = bd.read_bool()?; - frame.clamping_type = bd.read_bool()?; - } - - Parser::update_segmentation(&mut bd, &mut self.segmentation)?; - - frame.filter_type = bd.read_bool()?; - frame.loop_filter_level = bd.read_uint(6)?; - frame.sharpness_level = bd.read_uint(3)?; - - Parser::parse_mb_lf_adjustments(&mut bd, &mut self.mb_lf_adjust)?; - - frame.log2_nbr_of_dct_partitions = bd.read_uint(2)?; - - Parser::parse_quant_indices(&mut bd, &mut frame.quant_indices)?; - - frame.copy_buffer_to_golden = 0; - frame.copy_buffer_to_alternate = 0; - - if frame.key_frame { - frame.refresh_entropy_probs = bd.read_bool()?; - - frame.refresh_last = true; - frame.refresh_golden_frame = true; - frame.refresh_alternate_frame = true; - - Parser::mode_probs_init_defaults(&mut frame.mode_probs, true); - } else { - frame.refresh_golden_frame = bd.read_bool()?; - frame.refresh_alternate_frame = bd.read_bool()?; - - if !frame.refresh_golden_frame { - frame.copy_buffer_to_golden = bd.read_uint(2)?; - } - - if !frame.refresh_alternate_frame { - frame.copy_buffer_to_alternate = bd.read_uint(2)?; - } - - frame.sign_bias_golden = bd.read_bool()?; - frame.sign_bias_alternate = bd.read_bool()?; - frame.refresh_entropy_probs = bd.read_bool()?; - frame.refresh_last = bd.read_bool()?; - - frame.mode_probs = self.mode_probs; - } - - frame.coeff_prob = self.coeff_prob; - frame.mv_prob = self.mv_prob; - - Parser::parse_token_prob_update(&mut bd, &mut frame.coeff_prob)?; - - frame.mb_no_coeff_skip = bd.read_bool()?; - if frame.mb_no_coeff_skip { - frame.prob_skip_false = bd.read_uint(8)?; - } - - if !frame.key_frame { - frame.prob_intra = bd.read_uint(8)?; - frame.prob_last = bd.read_uint(8)?; - frame.prob_golden = bd.read_uint(8)?; - - let intra_16x16_prob_update_flag = bd.read_bool()?; - if intra_16x16_prob_update_flag { - for prob in frame.mode_probs.intra_16x16_prob.iter_mut() { - *prob = bd.read_uint(8)?; - } - } - - let intra_chroma_prob_update_flag = bd.read_bool()?; - if intra_chroma_prob_update_flag { - for prob in frame.mode_probs.intra_chroma_prob.iter_mut() { - *prob = bd.read_uint(8)?; - } - } - - Parser::parse_mv_prob_update(&mut bd, &mut frame.mv_prob)?; - } - - if frame.refresh_entropy_probs { - self.coeff_prob = frame.coeff_prob; - self.mv_prob = frame.mv_prob; - - if !frame.key_frame { - self.mode_probs = frame.mode_probs; - } - } - - frame.header_size = bd.pos() as u32; - Parser::sync_bd_state(&bd, frame); - - Ok(()) - } - - fn compute_partition_sizes(frame: &mut Header, data: &[u8]) -> Result<()> { - let num_partitions = usize::try_from(1 << frame.log2_nbr_of_dct_partitions)?; - let mut part_size_ofs = usize::try_from(frame.first_part_size)?; - let mut ofs = part_size_ofs + 3 * (num_partitions - 1); - - if ofs > data.len() { - return Err(anyhow!("Not enough bytes left to parse partition sizes.",)); - } - - for i in 0..num_partitions - 1 { - let b0 = u32::from(data[part_size_ofs + 0]); - let b1 = u32::from(data[part_size_ofs + 1]) << 8; - let b2 = u32::from(data[part_size_ofs + 2]) << 16; - - let part_size = usize::try_from(b0 | b1 | b2)?; - part_size_ofs += 3; - - frame.partition_size[i] = u32::try_from(part_size)?; - ofs += part_size; - } - - if ofs > data.len() { - return Err(anyhow!( - "Not enough bytes left to determine the last partition size", - )); - } - - frame.partition_size[num_partitions - 1] = u32::try_from(data.len() - ofs)?; - Ok(()) - } - - fn sync_bd_state>(bd: &BoolDecoder, frame: &mut Header) { - frame.bd_range = bd.range(); - frame.bd_value = bd.value(); - frame.bd_count = bd.count(); - } - - /// Parse a single frame from the chunk in `data`. - pub fn parse_frame>(&mut self, resource: T) -> Result> { - let mut frame = Frame::new(resource); - let mut reader = Cursor::new(frame.bitstream.as_ref()); - - self.parse_uncompressed_data_chunk(&mut reader, &mut frame.header)?; - - let data = frame.bitstream.as_ref(); - - if usize::from(frame.header.data_chunk_size) - + usize::try_from(frame.header.first_part_size)? - > data.len() - { - return Err(anyhow!("Broken data")); - } - - let data = &data[frame.header.data_chunk_size as usize..]; - - self.parse_frame_header(data, &mut frame.header)?; - Parser::compute_partition_sizes(&mut frame.header, data)?; - - Ok(frame) - } -} - -impl Default for Parser { - fn default() -> Self { - Self { - segmentation: Default::default(), - mb_lf_adjust: Default::default(), - coeff_prob: COEFF_DEFAULT_PROBS, - mv_prob: MV_DEFAULT_PROBS, - mode_probs: ModeProbs { - intra_16x16_prob: NK_Y_MODE_PROBS, - intra_chroma_prob: NK_UV_MODE_PROBS, - }, - } - } -} - -#[cfg(test)] -mod tests { - use super::Parser; - - // Test and test data extracted from GStreamer - // subprojects/gst-plugins-bad/tests/check/libs/vp8parser.c - const VP8_TEST_0_INTRA: &[u8] = include_bytes!("vp8-parser-test-0-intra.bin"); - const VP8_TEST_0_INTER: &[u8] = include_bytes!("vp8-parser-test-0-inter.bin"); - - #[test] - fn gst_vp8parser_test_intra() { - let mut parser = Parser::default(); - let frame = parser - .parse_frame(VP8_TEST_0_INTRA) - .expect("Parsing a intra frame failed"); - - assert!(frame.header.key_frame); - - assert_eq!(frame.header.first_part_size, 234); - assert_eq!(frame.header.width, 176); - assert_eq!(frame.header.height, 144); - - assert!(parser.mb_lf_adjust.loop_filter_adj_enable); - assert!(parser.mb_lf_adjust.mode_ref_lf_delta_update); - - assert_eq!(parser.mb_lf_adjust.ref_frame_delta[0], 2); - assert_eq!(parser.mb_lf_adjust.ref_frame_delta[1], 0); - assert_eq!(parser.mb_lf_adjust.ref_frame_delta[2], -2); - assert_eq!(parser.mb_lf_adjust.ref_frame_delta[3], -2); - - assert_eq!(parser.mb_lf_adjust.mb_mode_delta[0], 4); - assert_eq!(parser.mb_lf_adjust.mb_mode_delta[1], -2); - assert_eq!(parser.mb_lf_adjust.mb_mode_delta[2], 2); - assert_eq!(parser.mb_lf_adjust.mb_mode_delta[3], 4); - - assert_eq!(frame.header.quant_indices.y_ac_qi, 4); - assert!(frame.header.mb_no_coeff_skip); - - assert_eq!(frame.header.bd_range, 0xe8); - assert_eq!(frame.header.bd_value, 0x68); - assert_eq!(frame.header.bd_count, 1); - } - - #[test] - fn gst_vp8parser_test_inter() { - let mut parser = Parser::default(); - let frame = parser - .parse_frame(VP8_TEST_0_INTER) - .expect("Parsing a inter frame failed"); - - assert!(!frame.header.key_frame); - - assert_eq!(frame.header.first_part_size, 98); - assert!(parser.mb_lf_adjust.loop_filter_adj_enable); - assert_eq!(frame.header.quant_indices.y_ac_qi, 4); - - assert!(frame.header.refresh_entropy_probs); - assert!(frame.header.refresh_last); - assert!(frame.header.mb_no_coeff_skip); - - assert_eq!(frame.header.prob_skip_false, 131); - assert_eq!(frame.header.prob_intra, 224); - assert_eq!(frame.header.prob_last, 233); - assert_eq!(frame.header.prob_golden, 1); - - assert_eq!(frame.header.bd_range, 0x8e); - assert_eq!(frame.header.bd_value, 0x85); - assert_eq!(frame.header.bd_count, 5); - } -} diff --git a/media/vp8/src/probs.rs b/media/vp8/src/probs.rs deleted file mode 100644 index d37b18b546..0000000000 --- a/media/vp8/src/probs.rs +++ /dev/null @@ -1,376 +0,0 @@ -// Copyright 2022 The ChromiumOS Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -/// VP8 probability tables as per the reference software and specification. - -pub const MV_UPDATE_PROBS: [[u8; 19]; 2] = [ - [ - 237, 246, 253, 253, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 250, 250, 252, 254, - 254, - ], - [ - 231, 243, 245, 253, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 251, 251, 254, 254, - 254, - ], -]; - -pub const MV_DEFAULT_PROBS: [[u8; 19]; 2] = [ - [ - 162, 128, 225, 146, 172, 147, 214, 39, 156, 128, 129, 132, 75, 145, 178, 206, 239, 254, 254, - ], - [ - 164, 128, 204, 170, 119, 235, 140, 230, 228, 128, 130, 130, 74, 148, 180, 203, 236, 254, - 254, - ], -]; - -pub const NK_Y_MODE_PROBS: [u8; 4] = [112, 86, 140, 37]; - -pub const KF_Y_MODE_PROBS: [u8; 4] = [145, 156, 163, 128]; - -pub const NK_UV_MODE_PROBS: [u8; 3] = [162, 101, 204]; - -pub const KF_UV_MODE_PROBS: [u8; 3] = [142, 114, 183]; - -pub const COEFF_UPDATE_PROBS: [[[[u8; 11]; 3]; 8]; 4] = [ - [ - [ - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - ], - [ - [176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255], - [249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255], - [234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255], - [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255], - [239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], - [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255], - [251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255], - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], - [251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255], - [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255], - [250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255], - [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - ], - ], - [ - [ - [217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255], - [234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255], - ], - [ - [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255], - [238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255], - [249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], - [252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255], - [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255], - [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - ], - ], - [ - [ - [186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255], - [234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255], - [251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255], - ], - [ - [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], - [236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], - [251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255], - [254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255], - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - ], - ], - [ - [ - [248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255], - [248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255], - [246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255], - [252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255], - [248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255], - [253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255], - [245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255], - [253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255], - [252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255], - [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255], - [255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255], - [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - ], - [ - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], - ], - ], -]; - -pub const COEFF_DEFAULT_PROBS: [[[[u8; 11]; 3]; 8]; 4] = [ - [ - [ - [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128], - [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128], - [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128], - ], - [ - [253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128], - [189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128], - [106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128], - ], - [ - [1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128], - [181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128], - [78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128], - ], - [ - [1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128], - [184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128], - [77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128], - ], - [ - [1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128], - [170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128], - [37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128], - ], - [ - [1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128], - [207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128], - [102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128], - ], - [ - [1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128], - [177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128], - [80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128], - ], - [ - [1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128], - [246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128], - [255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128], - ], - ], - [ - [ - [198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62], - [131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1], - [68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128], - ], - [ - [1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128], - [184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128], - [81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128], - ], - [ - [1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128], - [99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128], - [23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128], - ], - [ - [1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128], - [109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128], - [44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128], - ], - [ - [1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128], - [94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128], - [22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128], - ], - [ - [1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128], - [124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128], - [35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128], - ], - [ - [1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128], - [121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128], - [45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128], - ], - [ - [1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128], - [203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128], - [137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128], - ], - ], - [ - [ - [253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128], - [175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128], - [73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128], - ], - [ - [1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128], - [239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128], - [155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128], - ], - [ - [1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128], - [201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128], - [69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128], - ], - [ - [1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128], - [223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128], - [141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128], - ], - [ - [1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128], - [190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128], - [149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128], - ], - [ - [1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128], - [247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128], - [240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128], - ], - [ - [1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128], - [213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128], - [55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128], - ], - [ - [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128], - [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128], - [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128], - ], - ], - [ - [ - [202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255], - [126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128], - [61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128], - ], - [ - [1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128], - [166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128], - [39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128], - ], - [ - [1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128], - [124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128], - [24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128], - ], - [ - [1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128], - [149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128], - [28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128], - ], - [ - [1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128], - [123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128], - [20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128], - ], - [ - [1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128], - [168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128], - [47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128], - ], - [ - [1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128], - [141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128], - [42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128], - ], - [ - [1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128], - [244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128], - [238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128], - ], - ], -]; diff --git a/media/vp8/src/vp8-parser-test-0-inter.bin b/media/vp8/src/vp8-parser-test-0-inter.bin deleted file mode 100644 index 6fce364dd8a8389d9b61ae79a644128ef9593a9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 554 zcmV+_0@eLd3;+NS5C9&_1Kh*y?;SAXMaYJxq@0d&?yg38Q&F>1C!qg<02zd)2M_r1r6+}NpkL=N)Eo5ya5QF)oQXw3>n~HK0I~rWyWkz z+XXm4{on;_wF1NIju>S5=X{t$Dq4X1>L3W1R&y36IA1z@e)A9GyQp?pyte(KX50US zVJY;JBYt>H95F?-8mA5%s(Rgp+U2N{%7LtMU7->f`R@HO^WRH{b$~1q1GXOsJbN;U z;jX4ZLrvDZ4V;}eHN~g+>=@D#n~;Q@*phzfx|dT^%Lm$l&|lVvlw`TeGc33i1QX;N zgr&q7PKU$nrKPO@*=g`Ez%6FSGrn_pbD5V sWUZQ@Ye3DAx)#MEl5hYH{cuW1Sf}P3O2Y@~;5i*s}9Hwm^G(gLJr7``oMm0ag5++MHkT z{(AAmnyCZ|{ZZn|WLMf;3>KACc}UzWCiy2)AHvpd+@`LT0{^e4-J!951C5vzY=Ak2 zWfL>4+%ANwsH)_X5E#la=%O1*p1|Ui#(;3(_(749#H;Z}-i!V`J}tnski%l{$NP`q z6L}9(Wcw>+7jGphocoxDvHmWBa~@G)Iw2@Awfzc6%Fb;U){p-51VsIK7tlRcMpIy1R8&{7p(a> z$yapE1C_h%1(}-2n@)1c)pdS<3Eu*6S;Qy=h)-GQFv(`3 zQSU&-ysUHs|7x<-8apgXW~l8LVv|bC2Znoa53pXQ-QgOU(<=9v29v+1juTKsyv{Zk z8y^+3B0kxO+ zmBt4uzeXonQp3mQ*UJD?c0NQ;t4+QCUF!3x6b?oizmqzyh