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:

                       pass            fail
python-aiortc          from testing    1.3.2-1
all others             from testing    from 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 = <tests.test_contrib_media.MediaRecorderTest 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 = <aiortc.codecs.h264.H264Encoder object at 0xeb813328>
frame = <av.VideoFrame #0, pts=0 yuv420p 640x480 at 0xeb817610>
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 = 1000000

    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",
            "tune": "zerolatency",  # does nothing using h264_omx
        }
      codec.open()

/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:138: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???

av/codec/context.pyx:267: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???

av/codec/context.pyx:289: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???
E   av.error.EncoderNotFoundError: [Errno 1129203192] Encoder not found

av/error.pyx:336: EncoderNotFoundError

During handling of the above exception, another exception occurred:

self = <tests.test_h264.H264Test testMethod=test_encoder>

    def test_encoder(self):
        encoder = get_encoder(H264_CODEC)
        self.assertIsInstance(encoder, H264Encoder)
            frame = self.create_video_frame(width=640, height=480, pts=0)
      packages, timestamp = encoder.encode(frame)

tests/test_h264.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/dist-packages/aiortc/codecs/h264.py:320: in encode
    return self._packetize(packages), timestamp
/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:255: in _packetize
    package = next(packages_iterator, None)
/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:289: in _encode_frame
    self.codec, self.codec_buffering = create_encoder_context(
/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:138: in create_encoder_context
    codec.open()
av/codec/context.pyx:267: in av.codec.context.CodecContext.open
    ???
av/codec/context.pyx:289: in av.codec.context.CodecContext.open
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???
E av.error.ExternalError: [Errno 542398533] Generic error in an external library

av/error.pyx:336: ExternalError
----------------------------- Captured stderr call -----------------------------
[h264_omx @ 0x49b70870] libOMX_Core.so not found
[h264_omx @ 0x49b70870] libOmxCore.so not found
[libx264 @ 0xeb7435d0] using cpu capabilities: ARMv6 NEON
_______________________ H264Test.test_encoder_buffering ________________________

self = <aiortc.codecs.h264.H264Encoder object at 0xeb813388>
frame = <av.VideoFrame #0, pts=0 yuv420p 640x480 at 0xeb8346f0>
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: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
args = ('h264_omx', 640, 480), kwargs = {'bitrate': 1000000}

    def mock_create_encoder_context(*args, **kwargs):
      codec, _ = create_encoder_context(*args, **kwargs)

tests/test_h264.py:123: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
codec_name = 'h264_omx', width = 640, height = 480, bitrate = 1000000

    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",
            "tune": "zerolatency",  # does nothing using h264_omx
        }
      codec.open()

/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:138: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???

av/codec/context.pyx:267: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???

av/codec/context.pyx:289: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???
E   av.error.EncoderNotFoundError: [Errno 1129203192] Encoder not found

av/error.pyx:336: EncoderNotFoundError

During handling of the above exception, another exception occurred:

self = <tests.test_h264.H264Test testMethod=test_encoder_buffering>

    def test_encoder_buffering(self):
        create_encoder_context = h264.create_encoder_context
            def mock_create_encoder_context(*args, **kwargs):
            codec, _ = create_encoder_context(*args, **kwargs)
            return FragmentedCodecContext(codec), True
            h264.create_encoder_context = mock_create_encoder_context
        try:
            encoder = get_encoder(H264_CODEC)
            self.assertIsInstance(encoder, H264Encoder)
frame = self.create_video_frame(width=640, height=480, pts=0)
          packages, timestamp = encoder.encode(frame)

tests/test_h264.py:132: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/dist-packages/aiortc/codecs/h264.py:320: in encode
    return self._packetize(packages), timestamp
/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:255: in _packetize
    package = next(packages_iterator, None)
/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:289: in _encode_frame
    self.codec, self.codec_buffering = create_encoder_context(
tests/test_h264.py:123: in mock_create_encoder_context
    codec, _ = create_encoder_context(*args, **kwargs)
/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:138: in create_encoder_context
    codec.open()
av/codec/context.pyx:267: in av.codec.context.CodecContext.open
    ???
av/codec/context.pyx:289: in av.codec.context.CodecContext.open
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???
E av.error.ExternalError: [Errno 542398533] Generic error in an external library

av/error.pyx:336: ExternalError
----------------------------- Captured stderr call -----------------------------
[h264_omx @ 0xeb707e60] libOMX_Core.so not found
[h264_omx @ 0xeb707e60] libOmxCore.so not found
[libx264 @ 0xeb705490] using cpu capabilities: ARMv6 NEON
_____________________ H264Test.test_encoder_target_bitrate _____________________

self = <aiortc.codecs.h264.H264Encoder object at 0xeb94f4f0>
frame = <av.VideoFrame #0, pts=0 yuv420p 640x480 at 0xeb834798>
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 = 1000000

    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",
            "tune": "zerolatency",  # does nothing using h264_omx
        }
      codec.open()

/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:138: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???

av/codec/context.pyx:267: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???

av/codec/context.pyx:289: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???
E   av.error.EncoderNotFoundError: [Errno 1129203192] Encoder not found

av/error.pyx:336: EncoderNotFoundError

During handling of the above exception, another exception occurred:

self = <tests.test_h264.H264Test testMethod=test_encoder_target_bitrate>

    def test_encoder_target_bitrate(self):
        encoder = get_encoder(H264_CODEC)
        self.assertIsInstance(encoder, H264Encoder)
        self.assertEqual(encoder.target_bitrate, 1000000)
            frame = self.create_video_frame(width=640, height=480, pts=0)
      packages, timestamp = encoder.encode(frame)

tests/test_h264.py:147: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/dist-packages/aiortc/codecs/h264.py:320: in encode
    return self._packetize(packages), timestamp
/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:255: in _packetize
    package = next(packages_iterator, None)
/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:289: in _encode_frame
    self.codec, self.codec_buffering = create_encoder_context(
/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:138: in create_encoder_context
    codec.open()
av/codec/context.pyx:267: in av.codec.context.CodecContext.open
    ???
av/codec/context.pyx:289: in av.codec.context.CodecContext.open
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???
E av.error.ExternalError: [Errno 542398533] Generic error in an external library

av/error.pyx:336: ExternalError
----------------------------- Captured stderr call -----------------------------
[h264_omx @ 0x4a771980] libOMX_Core.so not found
[h264_omx @ 0x4a771980] libOmxCore.so not found
[libx264 @ 0xeb742b00] using cpu capabilities: ARMv6 NEON
_________________________ H264Test.test_frame_encoder __________________________

self = <aiortc.codecs.h264.H264Encoder object at 0xeb94fee0>
frame = <av.VideoFrame #0, pts=0 yuv420p 640x480 at 0xeb988140>
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 = 1000000

    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",
            "tune": "zerolatency",  # does nothing using h264_omx
        }
      codec.open()

/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:138: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???

av/codec/context.pyx:267: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???

av/codec/context.pyx:289: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???
E   av.error.EncoderNotFoundError: [Errno 1129203192] Encoder not found

av/error.pyx:336: EncoderNotFoundError

During handling of the above exception, another exception occurred:

self = <tests.test_h264.H264Test testMethod=test_frame_encoder>

    def test_frame_encoder(self):
        encoder = get_encoder(H264_CODEC)
            frame = self.create_video_frame(width=640, height=480, pts=0)
      packages = list(encoder._encode_frame(frame, False))

tests/test_h264.py:254: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/dist-packages/aiortc/codecs/h264.py:289: in _encode_frame
    self.codec, self.codec_buffering = create_encoder_context(
/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:138: in create_encoder_context
    codec.open()
av/codec/context.pyx:267: in av.codec.context.CodecContext.open
    ???
av/codec/context.pyx:289: in av.codec.context.CodecContext.open
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???
E av.error.ExternalError: [Errno 542398533] Generic error in an external library

av/error.pyx:336: ExternalError
----------------------------- Captured stderr call -----------------------------
[h264_omx @ 0x49bf2810] libOMX_Core.so not found
[h264_omx @ 0x49bf2810] libOmxCore.so not found
[libx264 @ 0xeb7258f0] using cpu capabilities: ARMv6 NEON
_______________________ H264Test.test_roundtrip_1280_720 _______________________

self = <tests.test_h264.H264Test testMethod=test_roundtrip_1280_720>

    def test_roundtrip_1280_720(self):
      self.roundtrip_video(H264_CODEC, 1280, 720)

tests/test_h264.py:163: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/codecs.py:108: in roundtrip_video
    input_frames = self.create_video_frames(
tests/codecs.py:57: in create_video_frames
    self.create_video_frame(
tests/codecs.py:43: in create_video_frame
    frame = VideoFrame(width=width, height=height, format=format)
av/video/frame.pyx:84: in av.video.frame.VideoFrame.__cinit__
    ???
av/video/frame.pyx:110: in av.video.frame.VideoFrame._init
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???
E   av.error.MemoryError: [Errno 12] Cannot allocate memory

av/error.pyx:336: MemoryError
_______________________ H264Test.test_roundtrip_320_240 ________________________

self = <aiortc.codecs.h264.H264Encoder object at 0xeb97ad90>
frame = <av.VideoFrame #0, pts=0 yuv420p 320x240 at 0xeb988d10>
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 = 320, height = 240, bitrate = 1000000

    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",
            "tune": "zerolatency",  # does nothing using h264_omx
        }
      codec.open()

/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:138: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???

av/codec/context.pyx:267: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???

av/codec/context.pyx:289: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???
E   av.error.EncoderNotFoundError: [Errno 1129203192] Encoder not found

av/error.pyx:336: EncoderNotFoundError

During handling of the above exception, another exception occurred:

self = <tests.test_h264.H264Test testMethod=test_roundtrip_320_240>

    def test_roundtrip_320_240(self):
      self.roundtrip_video(H264_CODEC, 320, 240)

tests/test_h264.py:177: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/codecs.py:113: in roundtrip_video
    packages, timestamp = encoder.encode(frame)
/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:320: in encode
    return self._packetize(packages), timestamp
/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:255: in _packetize
    package = next(packages_iterator, None)
/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:289: in _encode_frame
    self.codec, self.codec_buffering = create_encoder_context(
/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:138: in create_encoder_context
    codec.open()
av/codec/context.pyx:267: in av.codec.context.CodecContext.open
    ???
av/codec/context.pyx:289: in av.codec.context.CodecContext.open
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???
E av.error.ExternalError: [Errno 542398533] Generic error in an external library

av/error.pyx:336: ExternalError
----------------------------- Captured stderr call -----------------------------
[h264_omx @ 0xeb7360a0] libOMX_Core.so not found
[h264_omx @ 0xeb7360a0] libOmxCore.so not found
[libx264 @ 0xeb736440] using cpu capabilities: ARMv6 NEON
x264 [error]: malloc of size 1500068 failed
_______________________ H264Test.test_roundtrip_640_480 ________________________

self = <aiortc.codecs.h264.H264Encoder object at 0xeb97a7f0>
frame = <av.VideoFrame #0, pts=0 yuv420p 640x480 at 0xeb9881b0>
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 = 1000000

    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",
            "tune": "zerolatency",  # does nothing using h264_omx
        }
      codec.open()

/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:138: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???

av/codec/context.pyx:267: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???

av/codec/context.pyx:289: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???
E   av.error.EncoderNotFoundError: [Errno 1129203192] Encoder not found

av/error.pyx:336: EncoderNotFoundError

During handling of the above exception, another exception occurred:

self = <tests.test_h264.H264Test testMethod=test_roundtrip_640_480>

    def test_roundtrip_640_480(self):
      self.roundtrip_video(H264_CODEC, 640, 480)

tests/test_h264.py:169: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tests/codecs.py:113: in roundtrip_video
    packages, timestamp = encoder.encode(frame)
/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:320: in encode
    return self._packetize(packages), timestamp
/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:255: in _packetize
    package = next(packages_iterator, None)
/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:289: in _encode_frame
    self.codec, self.codec_buffering = create_encoder_context(
/usr/lib/python3/dist-packages/aiortc/codecs/h264.py:138: in create_encoder_context
    codec.open()
av/codec/context.pyx:267: in av.codec.context.CodecContext.open
    ???
av/codec/context.pyx:289: in av.codec.context.CodecContext.open
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  ???
E av.error.ExternalError: [Errno 542398533] Generic error in an external library

av/error.pyx:336: ExternalError
----------------------------- Captured stderr call -----------------------------
[h264_omx @ 0x4aee1400] libOMX_Core.so not found
[h264_omx @ 0x4aee1400] libOmxCore.so not found
[libx264 @ 0x4aee17a0] using cpu capabilities: ARMv6 NEON
=============================== warnings summary ===============================
../../../../../usr/lib/python3/dist-packages/pytest_asyncio/plugin.py:191
/usr/lib/python3/dist-packages/pytest_asyncio/plugin.py:191: DeprecationWarning: The 'asyncio_mode' default value will change to 'strict' in future, please explicitly use 'asyncio_mode=strict' or 'asyncio_mode=auto' in pytest configuration file.
    config.issue_config_time_warning(LEGACY_MODE, stacklevel=2)

-- Docs: https://docs.pytest.org/en/stable/warnings.html
=========================== short test summary info ============================ FAILED tests/test_contrib_media.py::MediaRecorderTest::test_video_mp4_uhd - a... FAILED tests/test_h264.py::H264Test::test_encoder - av.error.ExternalError: [... FAILED tests/test_h264.py::H264Test::test_encoder_buffering - av.error.Extern... FAILED tests/test_h264.py::H264Test::test_encoder_target_bitrate - av.error.E... FAILED tests/test_h264.py::H264Test::test_frame_encoder - av.error.ExternalEr... FAILED tests/test_h264.py::H264Test::test_roundtrip_1280_720 - av.error.Memor... FAILED tests/test_h264.py::H264Test::test_roundtrip_320_240 - av.error.Extern... FAILED tests/test_h264.py::H264Test::test_roundtrip_640_480 - av.error.Extern... ======= 8 failed, 364 passed, 69 skipped, 1 warning in 80.10s (0:01:20) ========
autopkgtest [01:14:42]: test command1

Attachment: OpenPGP_signature
Description: OpenPGP digital signature

Reply via email to