Voice et bot modif

This commit is contained in:
pi 2026-06-16 17:09:34 +00:00
parent 189d56026b
commit 7333a22bcd
10774 changed files with 634644 additions and 933308 deletions

View file

@ -1,13 +1,15 @@
import cython
from cython.cimports import libav as lib
from cython.cimports.av.bytesource import ByteSource, bytesource
from cython.cimports.av.buffer import ByteSource, bytesource
from cython.cimports.av.codec.context import CodecContext
from cython.cimports.av.error import err_check
from cython.cimports.av.packet import Packet
from cython.cimports.av.subtitles.subtitle import SubtitleProxy, SubtitleSet
from cython.cimports.cpython.bytes import PyBytes_FromStringAndSize
from cython.cimports.libc.string import memcpy, strlen
from cython.cimports.libc.string import memcpy
@cython.final
@cython.cclass
class SubtitleCodecContext(CodecContext):
@property
@ -64,28 +66,16 @@ class SubtitleCodecContext(CodecContext):
self.open(strict=False)
# Calculate buffer size from subtitle text length
buf_size: cython.size_t = 0
i: cython.uint
for i in range(subtitle.proxy.struct.num_rects):
rect = subtitle.proxy.struct.rects[i]
if rect.ass != cython.NULL:
buf_size += strlen(rect.ass)
if rect.text != cython.NULL:
buf_size += strlen(rect.text)
buf_size += 1024 # padding for format overhead
buf: cython.p_uchar = cython.cast(cython.p_uchar, lib.av_malloc(buf_size))
buf: cython.p_uchar = cython.cast(cython.p_uchar, lib.av_malloc(1024 * 1024))
if buf == cython.NULL:
raise MemoryError("Failed to allocate subtitle encode buffer")
raise MemoryError()
ret: cython.int = lib.avcodec_encode_subtitle(
self.ptr,
buf,
buf_size,
1024 * 1024,
cython.address(subtitle.proxy.struct),
)
if ret < 0:
lib.av_free(buf)
err_check(ret, "avcodec_encode_subtitle()")
@ -93,7 +83,6 @@ class SubtitleCodecContext(CodecContext):
packet: Packet = Packet(ret)
memcpy(packet.ptr.data, buf, ret)
lib.av_free(buf)
packet.ptr.pts = subtitle.proxy.struct.pts
packet.ptr.dts = subtitle.proxy.struct.pts
packet.ptr.duration = (
@ -103,11 +92,17 @@ class SubtitleCodecContext(CodecContext):
return packet
@cython.cfunc
def _send_packet_and_recv(self, packet: Packet | None):
@cython.ccall
def decode(self, packet: Packet | None = None):
"""Decode a subtitle packet, returning a list of :class:`.Subtitle` objects
if a subtitle was decoded, or an empty list otherwise."""
if not self.codec.ptr:
raise ValueError("cannot decode unknown codec")
if packet is None:
raise RuntimeError("packet cannot be None")
self.open(strict=False)
proxy: SubtitleProxy = SubtitleProxy()
got_frame: cython.int = 0
@ -121,7 +116,7 @@ class SubtitleCodecContext(CodecContext):
)
if got_frame:
return SubtitleSet(proxy)
return list(SubtitleSet(proxy))
return []
@cython.ccall