Add h264_v4l2m2m codec and profiles to HomeKit cameras (#91246)

This commit is contained in:
Assaf Inbal 2023-04-12 23:46:21 +03:00 committed by GitHub
parent 4f507e7f57
commit 7446ff478f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 90 additions and 4 deletions

View file

@ -19,6 +19,8 @@ VIDEO_CODEC_COPY = "copy"
VIDEO_CODEC_LIBX264 = "libx264"
AUDIO_CODEC_OPUS = "libopus"
VIDEO_CODEC_H264_OMX = "h264_omx"
VIDEO_CODEC_H264_V4L2M2M = "h264_v4l2m2m"
VIDEO_PROFILE_NAMES = ["baseline", "main", "high"]
AUDIO_CODEC_COPY = "copy"
# #### Attributes ####
@ -54,6 +56,7 @@ CONF_STREAM_ADDRESS = "stream_address"
CONF_STREAM_SOURCE = "stream_source"
CONF_SUPPORT_AUDIO = "support_audio"
CONF_VIDEO_CODEC = "video_codec"
CONF_VIDEO_PROFILE_NAMES = "video_profile_names"
CONF_VIDEO_MAP = "video_map"
CONF_VIDEO_PACKET_SIZE = "video_packet_size"
CONF_STREAM_COUNT = "stream_count"
@ -71,6 +74,7 @@ DEFAULT_MAX_WIDTH = 1920
DEFAULT_PORT = 21063
DEFAULT_CONFIG_FLOW_PORT = 21064
DEFAULT_VIDEO_CODEC = VIDEO_CODEC_LIBX264
DEFAULT_VIDEO_PROFILE_NAMES = VIDEO_PROFILE_NAMES
DEFAULT_VIDEO_MAP = "0:v:0"
DEFAULT_VIDEO_PACKET_SIZE = 1316
DEFAULT_STREAM_COUNT = 3

View file

@ -40,6 +40,7 @@ from .const import (
CONF_VIDEO_CODEC,
CONF_VIDEO_MAP,
CONF_VIDEO_PACKET_SIZE,
CONF_VIDEO_PROFILE_NAMES,
DEFAULT_AUDIO_CODEC,
DEFAULT_AUDIO_MAP,
DEFAULT_AUDIO_PACKET_SIZE,
@ -51,6 +52,7 @@ from .const import (
DEFAULT_VIDEO_CODEC,
DEFAULT_VIDEO_MAP,
DEFAULT_VIDEO_PACKET_SIZE,
DEFAULT_VIDEO_PROFILE_NAMES,
SERV_DOORBELL,
SERV_MOTION_SENSOR,
SERV_SPEAKER,
@ -111,8 +113,6 @@ RESOLUTIONS = [
(1600, 1200),
]
VIDEO_PROFILE_NAMES = ["baseline", "main", "high"]
FFMPEG_WATCH_INTERVAL = timedelta(seconds=5)
FFMPEG_LOGGER = "ffmpeg_logger"
FFMPEG_WATCHER = "ffmpeg_watcher"
@ -128,6 +128,7 @@ CONFIG_DEFAULTS = {
CONF_AUDIO_MAP: DEFAULT_AUDIO_MAP,
CONF_VIDEO_MAP: DEFAULT_VIDEO_MAP,
CONF_VIDEO_CODEC: DEFAULT_VIDEO_CODEC,
CONF_VIDEO_PROFILE_NAMES: DEFAULT_VIDEO_PROFILE_NAMES,
CONF_AUDIO_PACKET_SIZE: DEFAULT_AUDIO_PACKET_SIZE,
CONF_VIDEO_PACKET_SIZE: DEFAULT_VIDEO_PACKET_SIZE,
CONF_STREAM_COUNT: DEFAULT_STREAM_COUNT,
@ -346,7 +347,7 @@ class Camera(HomeAccessory, PyhapCamera):
if self.config[CONF_VIDEO_CODEC] != "copy":
video_profile = (
"-profile:v "
+ VIDEO_PROFILE_NAMES[
+ self.config[CONF_VIDEO_PROFILE_NAMES][
int.from_bytes(stream_config["v_profile_id"], byteorder="big")
]
+ " "

View file

@ -95,6 +95,7 @@ from .const import (
TYPE_VALVE,
VIDEO_CODEC_COPY,
VIDEO_CODEC_H264_OMX,
VIDEO_CODEC_H264_V4L2M2M,
VIDEO_CODEC_LIBX264,
)
@ -107,7 +108,12 @@ MAX_VERSION_PART = 2**32 - 1
MAX_PORT = 65535
VALID_VIDEO_CODECS = [VIDEO_CODEC_LIBX264, VIDEO_CODEC_H264_OMX, AUDIO_CODEC_COPY]
VALID_VIDEO_CODECS = [
VIDEO_CODEC_LIBX264,
VIDEO_CODEC_H264_OMX,
VIDEO_CODEC_H264_V4L2M2M,
AUDIO_CODEC_COPY,
]
VALID_AUDIO_CODECS = [AUDIO_CODEC_OPUS, VIDEO_CODEC_COPY]
BASIC_INFO_SCHEMA = vol.Schema(