Skip to content
Merged
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
2 changes: 0 additions & 2 deletions av/filter/filter.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,7 @@ from av.descriptor cimport Descriptor


cdef class Filter:

cdef const lib.AVFilter *ptr

cdef object _inputs
cdef object _outputs
cdef Descriptor _descriptor
Expand Down
34 changes: 18 additions & 16 deletions av/filter/filter.pyx → av/filter/filter.py
Original file line number Diff line number Diff line change
@@ -1,24 +1,26 @@
cimport libav as lib
import cython
from cython.cimports import libav as lib
from cython.cimports.av.descriptor import wrap_avclass
from cython.cimports.av.filter.link import alloc_filter_pads

from av.descriptor cimport wrap_avclass
from av.filter.link cimport alloc_filter_pads
_cinit_sentinel = cython.declare(object, object())


cdef object _cinit_sentinel = object()


cdef Filter wrap_filter(const lib.AVFilter *ptr):
cdef Filter filter_ = Filter(_cinit_sentinel)
@cython.cfunc
def wrap_filter(ptr: cython.pointer[cython.const[lib.AVFilter]]) -> Filter:
filter_: Filter = Filter(_cinit_sentinel)
filter_.ptr = ptr
return filter_


cdef class Filter:
@cython.cclass
class Filter:
def __cinit__(self, name):
if name is _cinit_sentinel:
return
if not isinstance(name, str):
raise TypeError("takes a filter name as a string")

self.ptr = lib.avfilter_get_by_name(name)
if not self.ptr:
raise ValueError(f"no filter {name}")
Expand Down Expand Up @@ -60,19 +62,19 @@ def outputs(self):
return self._outputs


cdef get_filter_names():
names = set()
cdef const lib.AVFilter *ptr
cdef void *opaque = NULL
@cython.cfunc
def get_filter_names() -> set:
names: set = set()
ptr: cython.pointer[cython.const[lib.AVFilter]]
opaque: cython.p_void = cython.NULL
while True:
ptr = lib.av_filter_iterate(&opaque)
ptr = lib.av_filter_iterate(cython.address(opaque))
if ptr:
names.add(ptr.name)
else:
break
return names

filters_available = get_filter_names()


filters_available = get_filter_names()
filter_descriptor = wrap_avclass(lib.avfilter_get_class())
5 changes: 0 additions & 5 deletions av/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,6 @@ def _decode(s: cython.pointer[cython.char], encoding, errors) -> str:
return cython.cast(bytes, s).decode(encoding, errors)


@cython.cfunc
def _encode(s, encoding, errors) -> bytes:
return s.encode(encoding, errors)


@cython.cfunc
def avdict_to_dict(
input: cython.pointer[lib.AVDictionary], encoding: str, errors: str
Expand Down
Loading