Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion scripts/valgrind_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@ set -e

./ffmpeg/build/bin/ffmpeg -y -i tos_720p.mp4 -c:v copy -c:a copy -t 30 tos_720p_short.mp4

valgrind --error-exitcode=1 --leak-check=full target/debug/vidformer-cli validate --name tos_720p_short --vid-path tos_720p_short.mp4 --stream 0
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
valgrind --error-exitcode=1 --leak-check=full --suppressions="$SCRIPT_DIR/vidformer.supp" target/debug/vidformer-cli validate --name tos_720p_short --vid-path tos_720p_short.mp4 --stream 0
rm tos_720p_short.mp4
23 changes: 23 additions & 0 deletions scripts/vidformer.supp
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Rustls TLS session cache - uses lazy_static/once_cell pattern
# This is intentionally never freed as the OS cleans up on exit
{
rustls-session-cache
Memcheck:Leak
match-leak-kinds: possible
fun:malloc
...
fun:*hashbrown*
...
fun:*rustls*ClientSessionMemoryCache*
}

{
rustls-session-cache-2
Memcheck:Leak
match-leak-kinds: possible
fun:malloc
...
fun:*LimitedCache*
...
fun:*ClientSessionMemoryCache*
}
1 change: 1 addition & 0 deletions snake-pit/test_cv2.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ def rw(cv2):

path = tmp_path("mp4")
out = cv2.VideoWriter(path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (width, height))
assert out.isOpened()

count = 0
while True:
Expand Down
3 changes: 3 additions & 0 deletions vidformer-py/vidformer/cv2/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -503,6 +503,9 @@ def write(self, frame):
if len(self._feb) >= self._batch_size:
self._flush()

def isOpened(self):
return True

def release(self):
self._flush(True)
if self._path is not None:
Expand Down
2 changes: 1 addition & 1 deletion vidformer/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@ thiserror = "2.0.3"
opencv = { version = "0.98.0", default-features = false, features = ["clang-runtime", "imgproc"] }
crossbeam-channel = "0.5"
parking_lot = "0.12.2"
opendal = { version = "0.52", features = ["layers-blocking", "services-fs", "services-http"] }
opendal = { version = "0.55", features = ["blocking", "services-fs", "services-http"] }
tokio = { version = "1", features = ["full"] }
flate2 = "1.0"
4 changes: 2 additions & 2 deletions vidformer/src/av/demuxer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -107,15 +107,15 @@ impl Demuxer {

let op = service.blocking_operator(io_runtime_handle)?;

let reader: opendal::BlockingReader = op.reader(file_path).map_err(|e| {
let reader: opendal::blocking::Reader = op.reader(file_path).map_err(|e| {
if e.kind() == opendal::ErrorKind::NotFound {
crate::Error::IOError(format!("File `{}` not found", file_path))
} else {
crate::Error::IOError(format!("OpenDAL error: {}", e))
}
})?;

let reader: opendal::StdReader = match reader.into_std_read(0..file_size) {
let reader: opendal::blocking::StdReader = match reader.into_std_read(0..file_size) {
Ok(reader) => reader,
Err(err) => {
return Err(crate::Error::IOError(format!(
Expand Down
13 changes: 5 additions & 8 deletions vidformer/src/service.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,16 +61,13 @@ impl Service {
pub(crate) fn blocking_operator(
&self,
io_runtime: &tokio::runtime::Handle,
) -> Result<opendal::BlockingOperator, crate::Error> {
) -> Result<opendal::blocking::Operator, crate::Error> {
let op = self.operator()?;

let bop = if op.info().full_capability().blocking {
op.blocking()
} else {
let _x = io_runtime.enter();
op.layer(opendal::layers::BlockingLayer::create().unwrap())
.blocking()
};
let _guard = io_runtime.enter();
let bop = opendal::blocking::Operator::new(op).map_err(|e| {
crate::Error::AVError(format!("failed to create blocking operator: {}", e))
})?;

Ok(bop)
}
Expand Down
2 changes: 1 addition & 1 deletion vidformer/src/source.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ impl SourceVideoStreamMeta {

let file_size = {
let op = service.blocking_operator(io_runtime.handle())?;
let file_stat = op.stat(vid_path);
let file_stat: Result<opendal::Metadata, opendal::Error> = op.stat(vid_path);

let file_stat = match file_stat {
Ok(stat) => stat,
Expand Down