Skip to content

Commit a392441

Browse files
committed
Drop support for deprecated h264_omx
The `h264_omx` codec was used to support hardware accelerated encoding on Raspberry Pi, but it hasn't been shipped with Raspbian for several releases.
1 parent 6b3849b commit a392441

File tree

2 files changed

+11
-50
lines changed

2 files changed

+11
-50
lines changed

src/aiortc/codecs/h264.py

+10-27
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ def decode(self, encoded_frame: JitterFrame) -> List[Frame]:
122122

123123
def create_encoder_context(
124124
codec_name: str, width: int, height: int, bitrate: int
125-
) -> Tuple[VideoCodecContext, bool]:
125+
) -> VideoCodecContext:
126126
codec = cast(VideoCodecContext, av.CodecContext.create(codec_name, "w"))
127127
codec.width = width
128128
codec.height = height
@@ -133,18 +133,17 @@ def create_encoder_context(
133133
codec.options = {
134134
"profile": "baseline",
135135
"level": "31",
136-
"tune": "zerolatency", # does nothing using h264_omx
136+
"tune": "zerolatency",
137137
}
138138
codec.open()
139-
return codec, codec_name == "h264_omx"
139+
return codec
140140

141141

142142
class H264Encoder(Encoder):
143143
def __init__(self) -> None:
144144
self.buffer_data = b""
145145
self.buffer_pts: Optional[int] = None
146146
self.codec: Optional[VideoCodecContext] = None
147-
self.codec_buffering = False
148147
self.__target_bitrate = DEFAULT_BITRATE
149148

150149
@staticmethod
@@ -286,32 +285,16 @@ def _encode_frame(
286285
frame.pict_type = av.video.frame.PictureType.NONE
287286

288287
if self.codec is None:
289-
try:
290-
self.codec, self.codec_buffering = create_encoder_context(
291-
"h264_omx", frame.width, frame.height, bitrate=self.target_bitrate
292-
)
293-
except Exception:
294-
self.codec, self.codec_buffering = create_encoder_context(
295-
"libx264",
296-
frame.width,
297-
frame.height,
298-
bitrate=self.target_bitrate,
299-
)
288+
self.codec = create_encoder_context(
289+
"libx264",
290+
frame.width,
291+
frame.height,
292+
bitrate=self.target_bitrate,
293+
)
300294

301295
data_to_send = b""
302296
for package in self.codec.encode(frame):
303-
package_bytes = bytes(package)
304-
if self.codec_buffering:
305-
# delay sending to ensure we accumulate all packages
306-
# for a given PTS
307-
if package.pts == self.buffer_pts:
308-
self.buffer_data += package_bytes
309-
else:
310-
data_to_send += self.buffer_data
311-
self.buffer_data = package_bytes
312-
self.buffer_pts = package.pts
313-
else:
314-
data_to_send += package_bytes
297+
data_to_send += bytes(package)
315298

316299
if data_to_send:
317300
yield from self._split_bitstream(data_to_send)

tests/test_h264.py

+1-23
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from contextlib import redirect_stderr
44
from unittest import TestCase
55

6-
from aiortc.codecs import get_decoder, get_encoder, h264
6+
from aiortc.codecs import get_decoder, get_encoder
77
from aiortc.codecs.h264 import H264Decoder, H264Encoder, H264PayloadDescriptor
88
from aiortc.jitterbuffer import JitterFrame
99
from aiortc.rtcrtpparameters import RTCRtpCodecParameters
@@ -146,28 +146,6 @@ def test_encoder_pack(self):
146146
self.assertEqual(payloads, [b"\x00"])
147147
self.assertEqual(timestamp, 90)
148148

149-
def test_encoder_buffering(self):
150-
create_encoder_context = h264.create_encoder_context
151-
152-
def mock_create_encoder_context(*args, **kwargs):
153-
codec, _ = create_encoder_context(*args, **kwargs)
154-
return FragmentedCodecContext(codec), True
155-
156-
h264.create_encoder_context = mock_create_encoder_context
157-
try:
158-
encoder = get_encoder(H264_CODEC)
159-
self.assertIsInstance(encoder, H264Encoder)
160-
161-
frame = self.create_video_frame(width=640, height=480, pts=0)
162-
packages, timestamp = encoder.encode(frame)
163-
self.assertEqual(len(packages), 0)
164-
165-
frame = self.create_video_frame(width=640, height=480, pts=3000)
166-
packages, timestamp = encoder.encode(frame)
167-
self.assertGreaterEqual(len(packages), 1)
168-
finally:
169-
h264.create_encoder_context = create_encoder_context
170-
171149
def test_encoder_target_bitrate(self):
172150
encoder = get_encoder(H264_CODEC)
173151
self.assertIsInstance(encoder, H264Encoder)

0 commit comments

Comments
 (0)