- pub fn add(&mut self, buf: NABufferType) -> bool {
- if self.pool.len() < self.max_len {
- self.pool.push(NABufferRef::new(buf));
- true
- } else {
- false
- }
- }
- pub fn get_free(&mut self) -> Option<NABufferRef<NABufferType>> {
- for e in self.pool.iter() {
- if e.get_num_refs() == 1 {
- return Some(e.clone());
+}
+
+impl NAVideoBufferPool<u32> {
+ pub fn prealloc_video(&mut self, vinfo: NAVideoInfo, align: u8) -> Result<(), AllocatorError> {
+ let nbufs = self.max_len + self.add_len - self.pool.len();
+ for _ in 0..nbufs {
+ let vbuf = alloc_video_buffer(vinfo.clone(), align)?;
+ if let NABufferType::Video32(buf) = vbuf {
+ self.pool.push(buf);
+ } else {
+ return Err(AllocatorError::FormatError);