Source: python-aiortc
Version: 1.3.2-1
Severity: serious
User: debian...@lists.debian.org
Usertags: regression
Dear maintainer(s),
With a recent upload of python-aiortc the autopkgtest of python-aiortc
fails in testing on armhf when that autopkgtest is run with the binary
packages of python-aiortc from unstable. It passes when run with only
packages from testing. In tabular form:
passfail
python-aiortc from testing1.3.2-1
all others from testingfrom testing
I copied some of the output at the bottom of this report.
Currently this regression is blocking the migration to testing [1]. Can
you please investigate the situation and fix it?
More information about this bug and the reason for filing it can be found on
https://wiki.debian.org/ContinuousIntegration/RegressionEmailInformation
Paul
[1] https://qa.debian.org/excuses.php?package=python-aiortc
https://ci.debian.net/data/autopkgtest/testing/armhf/p/python-aiortc/22926423/log.gz
=== FAILURES
===
_ MediaRecorderTest.test_video_mp4_uhd
_
self = testMethod=test_video_mp4_uhd>
@asynctest
async def test_video_mp4_uhd(self):
path = self.temporary_path("test.mp4")
recorder = MediaRecorder(path)
recorder.addTrack(VideoStreamTrackUhd())
await recorder.start()
await asyncio.sleep(2)
await recorder.stop()
tests/test_contrib_media.py:651: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3/dist-packages/aiortc/contrib/media.py:383: in stop
for packet in context.stream.encode(None):
av/stream.pyx:164: in av.stream.Stream.encode
???
av/codec/context.pyx:492: in av.codec.context.CodecContext.encode
???
av/codec/context.pyx:411: in
av.codec.context.CodecContext._send_frame_and_recv
???
av/codec/context.pyx:469: in av.codec.context.CodecContext._recv_packet
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _
???
E av.error.ExternalError: [Errno 542398533] Generic error in an
external library
av/error.pyx:336: ExternalError
- Captured stderr call
-
[libx264 @ 0x1425410] using cpu capabilities: ARMv6 NEON
[libx264 @ 0x1425410] profile High, level 5.1, 4:2:0, 8-bit
[libx264 @ 0x1425410] 264 - core 164 r3095 baee400 - H.264/MPEG-4 AVC
codec - Copyleft 2003-2022 - http://www.videolan.org/x264.html -
options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7
psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1
8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2
threads=33 lookahead_threads=16 sliced_threads=1 slices=33 nr=0
decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3
b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2
keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40
rc=abr mbtree=1 bitrate=1024 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69
qpstep=4 ip_ratio=1.40 aq=1:1.00
x264 [error]: malloc of size 26198688 failed
x264 [error]: malloc of size 43687792 failed
H264Test.test_encoder
_
self =
frame =
force_keyframe = False
def _encode_frame(
self, frame: av.VideoFrame, force_keyframe: bool
) -> Iterator[bytes]:
if self.codec and (
frame.width != self.codec.width
or frame.height != self.codec.height
# we only adjust bitrate if it changes by over 10%
or abs(self.target_bitrate - self.codec.bit_rate) /
self.codec.bit_rate
> 0.1
):
self.buffer_data = b""
self.buffer_pts = None
self.codec = None
# reset the picture type, otherwise no B-frames are produced
frame.pict_type = av.video.frame.PictureType.NONE
if self.codec is None:
try:
self.codec, self.codec_buffering = create_encoder_context(
"h264_omx", frame.width, frame.height,
bitrate=self.target_bitrate
)
/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:285: _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
codec_name = 'h264_omx', width = 640, height = 480, bitrate = 100
def create_encoder_context(
codec_name: str, width: int, height: int, bitrate: int
) -> Tuple[av.CodecContext, bool]:
codec = av.CodecContext.create(codec_name, "w")
codec.width = width
codec.height = height
codec.bit_rate = bitrate
codec.pix_fmt = "yuv420p"
codec.framerate = fractions.Fraction(MAX_FRAME_RATE, 1)
codec.time_base = fractions.Fraction(1, MAX_FRAME_RATE)
codec.options = {
"profile": "baseline",
"level": "31",