Skip to content
Merged
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
55 changes: 27 additions & 28 deletions av/audio/codeccontext.pyx → av/audio/codeccontext.py
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
cimport libav as lib

from av.audio.format cimport AudioFormat, get_audio_format
from av.audio.frame cimport AudioFrame, alloc_audio_frame
from av.audio.layout cimport AudioLayout, get_audio_layout
from av.codec.hwaccel cimport HWAccel
from av.frame cimport Frame
from av.packet cimport Packet


cdef class AudioCodecContext(CodecContext):
cdef _init(self, lib.AVCodecContext *ptr, const lib.AVCodec *codec, HWAccel hwaccel):
CodecContext._init(self, ptr, codec, hwaccel)

cdef _prepare_frames_for_encode(self, Frame input_frame):

cdef AudioFrame frame = input_frame
cdef bint allow_var_frame_size = self.ptr.codec.capabilities & lib.AV_CODEC_CAP_VARIABLE_FRAME_SIZE
import cython
from cython.cimports import libav as lib
from cython.cimports.av.audio.format import AudioFormat, get_audio_format
from cython.cimports.av.audio.frame import AudioFrame, alloc_audio_frame
from cython.cimports.av.audio.layout import AudioLayout, get_audio_layout
from cython.cimports.av.frame import Frame
from cython.cimports.av.packet import Packet


@cython.cclass
class AudioCodecContext(CodecContext):
@cython.cfunc
def _prepare_frames_for_encode(self, input_frame: Frame | None):
frame: AudioFrame | None = input_frame
allow_var_frame_size: cython.bint = (
self.ptr.codec.capabilities & lib.AV_CODEC_CAP_VARIABLE_FRAME_SIZE
)

# Note that the resampler will simply return an input frame if there is
# no resampling to be done. The control flow was just a little easier this way.
Expand All @@ -24,22 +23,22 @@
format=self.format,
layout=self.layout,
rate=self.ptr.sample_rate,
frame_size=None if allow_var_frame_size else self.ptr.frame_size
frame_size=None if allow_var_frame_size else self.ptr.frame_size,
)
frames = self.resampler.resample(frame)

# flush if input frame is None
if input_frame is None:
frames.append(None)
frames.append(None) # flush if input frame is None

return frames

cdef Frame _alloc_next_frame(self):
@cython.cfunc
def _alloc_next_frame(self) -> Frame:
return alloc_audio_frame()

cdef _setup_decoded_frame(self, Frame frame, Packet packet):
@cython.cfunc
def _setup_decoded_frame(self, frame: Frame, packet: Packet):
CodecContext._setup_decoded_frame(self, frame, packet)
cdef AudioFrame aframe = frame
aframe: AudioFrame = frame
aframe._init_user_attributes()

@property
Expand All @@ -61,7 +60,7 @@ def sample_rate(self):
return self.ptr.sample_rate

@sample_rate.setter
def sample_rate(self, int value):
def sample_rate(self, value: cython.int):
self.ptr.sample_rate = value

@property
Expand All @@ -88,7 +87,7 @@ def layout(self):

@layout.setter
def layout(self, value):
cdef AudioLayout layout = AudioLayout(value)
layout: AudioLayout = AudioLayout(value)
self.ptr.ch_layout = layout.layout

@property
Expand All @@ -102,5 +101,5 @@ def format(self):

@format.setter
def format(self, value):
cdef AudioFormat format = AudioFormat(value)
format: AudioFormat = AudioFormat(value)
self.ptr.sample_fmt = format.sample_fmt
Loading