Voice et bot modif
This commit is contained in:
parent
189d56026b
commit
7333a22bcd
10774 changed files with 634644 additions and 933308 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue