diff --git a/av/audio/codeccontext.pyi b/av/audio/codeccontext.pyi index 80c93afc8..f6ac21a43 100644 --- a/av/audio/codeccontext.pyi +++ b/av/audio/codeccontext.pyi @@ -1,5 +1,5 @@ from collections.abc import Iterator -from typing import Literal +from typing import Literal, final from av.codec.context import CodecContext from av.packet import Packet @@ -16,6 +16,7 @@ class _Layout: def __get__(self, i: object | None, owner: type | None = None) -> AudioLayout: ... def __set__(self, instance: object, value: AudioLayout | str) -> None: ... +@final class AudioCodecContext(CodecContext): frame_size: int sample_rate: int @@ -27,6 +28,6 @@ class AudioCodecContext(CodecContext): def channels(self) -> int: ... @property def block_align(self) -> int: ... - def encode(self, frame: AudioFrame | None = None) -> list[Packet]: ... - def encode_lazy(self, frame: AudioFrame | None = None) -> Iterator[Packet]: ... + def encode(self, frame: AudioFrame | None = None) -> list[Packet]: ... # type: ignore[override] + def encode_lazy(self, frame: AudioFrame | None = None) -> Iterator[Packet]: ... # type: ignore[override] def decode(self, packet: Packet | None = None) -> list[AudioFrame]: ... diff --git a/av/codec/context.pyi b/av/codec/context.pyi index d34d5b2d0..e9b5764af 100644 --- a/av/codec/context.pyi +++ b/av/codec/context.pyi @@ -3,8 +3,11 @@ from enum import Flag, IntEnum, IntFlag from fractions import Fraction from typing import ClassVar, Literal, cast, overload +from typing_extensions import disjoint_base + from av.audio import _AudioCodecName from av.audio.codeccontext import AudioCodecContext +from av.frame import Frame from av.packet import Packet, PktSideDataT from av.rational import AVRational from av.sidedata.sidedata import Type as FrameSideDataType @@ -116,6 +119,7 @@ class CodecOptionSet: generic: tuple[CodecOption, ...] private: tuple[CodecOption, ...] +@disjoint_base class CodecContext: name: str type: Literal["video", "audio", "data", "subtitle", "attachment"] @@ -222,3 +226,6 @@ class CodecContext: self, raw_input: bytes | bytearray | memoryview | None = None ) -> list[Packet]: ... def flush_buffers(self) -> None: ... + def encode(self, frame: Frame | None = None): ... + def encode_lazy(self, frame: Frame | None = None): ... + def decode(self, packet: Packet | None = None): ... diff --git a/av/subtitles/codeccontext.pyi b/av/subtitles/codeccontext.pyi index 7f8a49d09..57bad688b 100644 --- a/av/subtitles/codeccontext.pyi +++ b/av/subtitles/codeccontext.pyi @@ -1,9 +1,10 @@ -from typing import Literal +from typing import Literal, final from av.codec.context import CodecContext from av.packet import Packet from av.subtitles.subtitle import SubtitleSet +@final class SubtitleCodecContext(CodecContext): type: Literal["subtitle"] subtitle_header: bytes | None diff --git a/av/video/codeccontext.pyi b/av/video/codeccontext.pyi index 259c4e594..d73b6d2f4 100644 --- a/av/video/codeccontext.pyi +++ b/av/video/codeccontext.pyi @@ -1,6 +1,6 @@ from collections.abc import Iterator from fractions import Fraction -from typing import Literal +from typing import Literal, final from av.codec.context import CodecContext from av.packet import Packet @@ -10,6 +10,7 @@ from .format import VideoFormat from .frame import VideoFrame from .reformatter import VideoReformatter +@final class VideoCodecContext(CodecContext): format: VideoFormat | None width: int @@ -52,6 +53,6 @@ class VideoCodecContext(CodecContext): qmax: int type: Literal["video"] - def encode(self, frame: VideoFrame | None = None) -> list[Packet]: ... - def encode_lazy(self, frame: VideoFrame | None = None) -> Iterator[Packet]: ... + def encode(self, frame: VideoFrame | None = None) -> list[Packet]: ... # type: ignore[override] + def encode_lazy(self, frame: VideoFrame | None = None) -> Iterator[Packet]: ... # type: ignore[override] def decode(self, packet: Packet | None = None) -> list[VideoFrame]: ...