Buckets:
MisterAI/LocalAI_Demo_backends / cpu-diffusers.upgrade-tmp /venv /lib /python3.10 /site-packages /av /audio /layout.py
| from dataclasses import dataclass | |
| import cython | |
| from cython.cimports import libav as lib | |
| from cython.cimports.cpython.bytes import PyBytes_FromStringAndSize | |
| class AudioChannel: | |
| name: str | |
| description: str | |
| def __repr__(self): | |
| return f"<av.AudioChannel '{self.name}' ({self.description})>" | |
| _cinit_bypass_sentinel = cython.declare(object, object()) | |
| def get_audio_layout(c_layout: lib.AVChannelLayout) -> AudioLayout: | |
| """Get an AudioLayout from Cython land.""" | |
| layout: AudioLayout = AudioLayout(_cinit_bypass_sentinel) | |
| layout.layout = c_layout | |
| return layout | |
| class AudioLayout: | |
| def __cinit__(self, layout): | |
| if layout is _cinit_bypass_sentinel: | |
| return | |
| if type(layout) is str: | |
| ret = lib.av_channel_layout_from_string(cython.address(c_layout), layout) | |
| if ret != 0: | |
| raise ValueError(f"Invalid layout: {layout}") | |
| elif isinstance(layout, AudioLayout): | |
| c_layout = cython.cast(AudioLayout, layout).layout | |
| else: | |
| raise TypeError( | |
| f"layout must be of type: string | av.AudioLayout, got {type(layout)}" | |
| ) | |
| self.layout = c_layout | |
| def __repr__(self): | |
| return f"<av.{self.__class__.__name__} {self.name!r}>" | |
| def __eq__(self, other): | |
| if not isinstance(other, AudioLayout): | |
| return False | |
| c_other: lib.AVChannelLayout = cython.cast(AudioLayout, other).layout | |
| return ( | |
| lib.av_channel_layout_compare( | |
| cython.address(self.layout), cython.address(c_other) | |
| ) | |
| == 0 | |
| ) | |
| def nb_channels(self): | |
| return self.layout.nb_channels | |
| def channels(self): | |
| buf: cython.char[16] | |
| buf2: cython.char[128] | |
| results: list = [] | |
| for index in range(self.layout.nb_channels): | |
| size = lib.av_channel_name( | |
| buf, | |
| cython.sizeof(buf), | |
| lib.av_channel_layout_channel_from_index( | |
| cython.address(self.layout), index | |
| ), | |
| ) | |
| size2 = lib.av_channel_description( | |
| buf2, | |
| cython.sizeof(buf2), | |
| lib.av_channel_layout_channel_from_index( | |
| cython.address(self.layout), index | |
| ), | |
| ) | |
| results.append( | |
| AudioChannel( | |
| PyBytes_FromStringAndSize(buf, size - 1).decode("utf-8"), | |
| PyBytes_FromStringAndSize(buf2, size2 - 1).decode("utf-8"), | |
| ) | |
| ) | |
| return tuple(results) | |
| def name(self) -> str: | |
| """The canonical name of the audio layout.""" | |
| layout_name: cython.char[129] | |
| ret: cython.int = lib.av_channel_layout_describe( | |
| cython.address(self.layout), layout_name, cython.sizeof(layout_name) | |
| ) | |
| if ret < 0: | |
| raise RuntimeError(f"Failed to get layout name: {ret}") | |
| return layout_name | |
Xet Storage Details
- Size:
- 3.12 kB
- Xet hash:
- d79005c58b58d490dbd600957aa17152eab5086d35bf2ce0053f2beacf2ab817
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.