forked from auracaster/bumble_mirror
replace bitstruct with construct
This commit is contained in:
@@ -18,7 +18,7 @@
|
|||||||
import struct
|
import struct
|
||||||
import logging
|
import logging
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
import bitstruct
|
import construct
|
||||||
|
|
||||||
from .company_ids import COMPANY_IDENTIFIERS
|
from .company_ids import COMPANY_IDENTIFIERS
|
||||||
from .sdp import (
|
from .sdp import (
|
||||||
@@ -258,7 +258,15 @@ class SbcMediaCodecInformation(
|
|||||||
A2DP spec - 4.3.2 Codec Specific Information Elements
|
A2DP spec - 4.3.2 Codec Specific Information Elements
|
||||||
'''
|
'''
|
||||||
|
|
||||||
BIT_FIELDS = 'u4u4u4u2u2u8u8'
|
BIT_FIELDS = construct.Bitwise(construct.Sequence(
|
||||||
|
construct.BitsInteger(4),
|
||||||
|
construct.BitsInteger(4),
|
||||||
|
construct.BitsInteger(4),
|
||||||
|
construct.BitsInteger(2),
|
||||||
|
construct.BitsInteger(2),
|
||||||
|
construct.BitsInteger(8),
|
||||||
|
construct.BitsInteger(8),
|
||||||
|
))
|
||||||
SAMPLING_FREQUENCY_BITS = {16000: 1 << 3, 32000: 1 << 2, 44100: 1 << 1, 48000: 1}
|
SAMPLING_FREQUENCY_BITS = {16000: 1 << 3, 32000: 1 << 2, 44100: 1 << 1, 48000: 1}
|
||||||
CHANNEL_MODE_BITS = {
|
CHANNEL_MODE_BITS = {
|
||||||
SBC_MONO_CHANNEL_MODE: 1 << 3,
|
SBC_MONO_CHANNEL_MODE: 1 << 3,
|
||||||
@@ -276,7 +284,7 @@ class SbcMediaCodecInformation(
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def from_bytes(data):
|
def from_bytes(data):
|
||||||
return SbcMediaCodecInformation(
|
return SbcMediaCodecInformation(
|
||||||
*bitstruct.unpack(SbcMediaCodecInformation.BIT_FIELDS, data)
|
*SbcMediaCodecInformation.BIT_FIELDS.parse(data)
|
||||||
)
|
)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@@ -326,7 +334,7 @@ class SbcMediaCodecInformation(
|
|||||||
)
|
)
|
||||||
|
|
||||||
def __bytes__(self):
|
def __bytes__(self):
|
||||||
return bitstruct.pack(self.BIT_FIELDS, *self)
|
return self.BIT_FIELDS.build(self)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
channel_modes = ['MONO', 'DUAL_CHANNEL', 'STEREO', 'JOINT_STEREO']
|
channel_modes = ['MONO', 'DUAL_CHANNEL', 'STEREO', 'JOINT_STEREO']
|
||||||
@@ -350,14 +358,21 @@ class SbcMediaCodecInformation(
|
|||||||
class AacMediaCodecInformation(
|
class AacMediaCodecInformation(
|
||||||
namedtuple(
|
namedtuple(
|
||||||
'AacMediaCodecInformation',
|
'AacMediaCodecInformation',
|
||||||
['object_type', 'sampling_frequency', 'channels', 'vbr', 'bitrate'],
|
['object_type', 'sampling_frequency', 'channels', 'rfa', 'vbr', 'bitrate'],
|
||||||
)
|
)
|
||||||
):
|
):
|
||||||
'''
|
'''
|
||||||
A2DP spec - 4.5.2 Codec Specific Information Elements
|
A2DP spec - 4.5.2 Codec Specific Information Elements
|
||||||
'''
|
'''
|
||||||
|
|
||||||
BIT_FIELDS = 'u8u12u2p2u1u23'
|
BIT_FIELDS = construct.Bitwise(construct.Sequence(
|
||||||
|
construct.BitsInteger(8),
|
||||||
|
construct.BitsInteger(12),
|
||||||
|
construct.BitsInteger(2),
|
||||||
|
construct.BitsInteger(2),
|
||||||
|
construct.BitsInteger(1),
|
||||||
|
construct.BitsInteger(23),
|
||||||
|
))
|
||||||
OBJECT_TYPE_BITS = {
|
OBJECT_TYPE_BITS = {
|
||||||
MPEG_2_AAC_LC_OBJECT_TYPE: 1 << 7,
|
MPEG_2_AAC_LC_OBJECT_TYPE: 1 << 7,
|
||||||
MPEG_4_AAC_LC_OBJECT_TYPE: 1 << 6,
|
MPEG_4_AAC_LC_OBJECT_TYPE: 1 << 6,
|
||||||
@@ -383,7 +398,7 @@ class AacMediaCodecInformation(
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def from_bytes(data):
|
def from_bytes(data):
|
||||||
return AacMediaCodecInformation(
|
return AacMediaCodecInformation(
|
||||||
*bitstruct.unpack(AacMediaCodecInformation.BIT_FIELDS, data)
|
*AacMediaCodecInformation.BIT_FIELDS.parse(data)
|
||||||
)
|
)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@@ -394,6 +409,7 @@ class AacMediaCodecInformation(
|
|||||||
object_type=cls.OBJECT_TYPE_BITS[object_type],
|
object_type=cls.OBJECT_TYPE_BITS[object_type],
|
||||||
sampling_frequency=cls.SAMPLING_FREQUENCY_BITS[sampling_frequency],
|
sampling_frequency=cls.SAMPLING_FREQUENCY_BITS[sampling_frequency],
|
||||||
channels=cls.CHANNELS_BITS[channels],
|
channels=cls.CHANNELS_BITS[channels],
|
||||||
|
rfa=0,
|
||||||
vbr=vbr,
|
vbr=vbr,
|
||||||
bitrate=bitrate,
|
bitrate=bitrate,
|
||||||
)
|
)
|
||||||
@@ -411,7 +427,7 @@ class AacMediaCodecInformation(
|
|||||||
)
|
)
|
||||||
|
|
||||||
def __bytes__(self):
|
def __bytes__(self):
|
||||||
return bitstruct.pack(self.BIT_FIELDS, *self)
|
return self.BIT_FIELDS.build(self)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
object_types = [
|
object_types = [
|
||||||
|
|||||||
@@ -63,10 +63,6 @@ ignore_errors = true
|
|||||||
module = "aioconsole.*"
|
module = "aioconsole.*"
|
||||||
ignore_missing_imports = true
|
ignore_missing_imports = true
|
||||||
|
|
||||||
[[tool.mypy.overrides]]
|
|
||||||
module = "bitstruct.*"
|
|
||||||
ignore_missing_imports = true
|
|
||||||
|
|
||||||
[[tool.mypy.overrides]]
|
[[tool.mypy.overrides]]
|
||||||
module = "colors.*"
|
module = "colors.*"
|
||||||
ignore_missing_imports = true
|
ignore_missing_imports = true
|
||||||
|
|||||||
@@ -33,8 +33,8 @@ install_requires =
|
|||||||
aioconsole >= 0.4.1
|
aioconsole >= 0.4.1
|
||||||
ansicolors >= 1.1
|
ansicolors >= 1.1
|
||||||
appdirs >= 1.4
|
appdirs >= 1.4
|
||||||
bitstruct >= 8.12
|
|
||||||
click >= 7.1.2; platform_system!='Emscripten'
|
click >= 7.1.2; platform_system!='Emscripten'
|
||||||
|
construct >= 2.10
|
||||||
cryptography == 35; platform_system!='Emscripten'
|
cryptography == 35; platform_system!='Emscripten'
|
||||||
grpcio >= 1.46; platform_system!='Emscripten'
|
grpcio >= 1.46; platform_system!='Emscripten'
|
||||||
libusb1 >= 2.0.1; platform_system!='Emscripten'
|
libusb1 >= 2.0.1; platform_system!='Emscripten'
|
||||||
|
|||||||
Reference in New Issue
Block a user