From c668c8b73c1abf76e40ca5b6c301c84f88594f43 Mon Sep 17 00:00:00 2001 From: WyattBlue Date: Sat, 1 Feb 2025 18:33:40 -0500 Subject: [PATCH] Add mode to Codec, display C func in err --- av/codec/codec.pyi | 2 ++ av/codec/codec.pyx | 6 +++++- av/codec/context.pyx | 8 ++++---- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/av/codec/codec.pyi b/av/codec/codec.pyi index 73c1f1edb..3a6c3a866 100644 --- a/av/codec/codec.pyi +++ b/av/codec/codec.pyi @@ -51,6 +51,8 @@ class Codec: def is_encoder(self) -> bool: ... @property def is_decoder(self) -> bool: ... + @property + def mode(self) -> Literal["r", "w"]: ... descriptor: Descriptor @property def name(self) -> str: ... diff --git a/av/codec/codec.pyx b/av/codec/codec.pyx index 73f085e8d..3e9e028f8 100644 --- a/av/codec/codec.pyx +++ b/av/codec/codec.pyx @@ -119,7 +119,7 @@ cdef class Codec: raise RuntimeError("%s is both encoder and decoder.") def __repr__(self): - mode = "w" if self.is_encoder else "r" + mode = self.mode return f"" def create(self, kind = None): @@ -130,6 +130,10 @@ cdef class Codec: from .context import CodecContext return CodecContext.create(self) + @property + def mode(self): + return "w" if self.is_encoder else "r" + @property def is_decoder(self): return not self.is_encoder diff --git a/av/codec/context.pyx b/av/codec/context.pyx index e7136b86f..a56f14ddd 100644 --- a/av/codec/context.pyx +++ b/av/codec/context.pyx @@ -324,7 +324,7 @@ cdef class CodecContext: cdef int res with nogil: res = lib.avcodec_send_frame(self.ptr, frame.ptr if frame is not None else NULL) - err_check(res) + err_check(res, "avcodec_send_frame()") packet = self._recv_packet() while packet: @@ -337,7 +337,7 @@ cdef class CodecContext: cdef int res with nogil: res = lib.avcodec_send_packet(self.ptr, packet.ptr if packet is not None else NULL) - err_check(res) + err_check(res, "avcodec_send_packet()") out = [] while True: @@ -365,7 +365,7 @@ cdef class CodecContext: if res == -EAGAIN or res == lib.AVERROR_EOF: return - err_check(res) + err_check(res, "avcodec_receive_frame()") frame = self._transfer_hwframe(frame) @@ -384,7 +384,7 @@ cdef class CodecContext: res = lib.avcodec_receive_packet(self.ptr, packet.ptr) if res == -EAGAIN or res == lib.AVERROR_EOF: return - err_check(res) + err_check(res, "avcodec_receive_packet()") if not res: return packet