Put access to ffmpeg hass.data behind a method (#62570)

* Put access to ffmpeg hass.data behind a method

Move all callers of `hass.data[DATA_FFMPEG]` to a new function that returns the FFMpegManager.

* Update homeassistant/components/ffmpeg/__init__.py

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>

* Remove unnecessary async_ prefix

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
This commit is contained in:
Allen Porter 2021-12-21 23:40:43 -08:00 committed by GitHub
parent ce9abdb520
commit 14e4216e29
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 30 additions and 22 deletions

View File

@ -15,7 +15,7 @@ import voluptuous as vol
from homeassistant.components.camera import SUPPORT_ON_OFF, SUPPORT_STREAM, Camera from homeassistant.components.camera import SUPPORT_ON_OFF, SUPPORT_STREAM, Camera
from homeassistant.components.camera.const import DOMAIN as CAMERA_DOMAIN from homeassistant.components.camera.const import DOMAIN as CAMERA_DOMAIN
from homeassistant.components.ffmpeg import DATA_FFMPEG, FFmpegManager from homeassistant.components.ffmpeg import FFmpegManager, get_ffmpeg_manager
from homeassistant.const import ATTR_ENTITY_ID, CONF_NAME, STATE_OFF, STATE_ON from homeassistant.const import ATTR_ENTITY_ID, CONF_NAME, STATE_OFF, STATE_ON
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry from homeassistant.helpers import entity_registry
@ -136,7 +136,7 @@ async def async_setup_platform(
name = discovery_info[CONF_NAME] name = discovery_info[CONF_NAME]
device = hass.data[DATA_AMCREST][DEVICES][name] device = hass.data[DATA_AMCREST][DEVICES][name]
entity = AmcrestCam(name, device, hass.data[DATA_FFMPEG]) entity = AmcrestCam(name, device, get_ffmpeg_manager(hass))
# 2021.9.0 introduced unique id's for the camera entity, but these were not # 2021.9.0 introduced unique id's for the camera entity, but these were not
# unique for different resolution streams. If any cameras were configured # unique for different resolution streams. If any cameras were configured

View File

@ -7,7 +7,7 @@ from haffmpeg.camera import CameraMjpeg
import voluptuous as vol import voluptuous as vol
from homeassistant.components.camera import PLATFORM_SCHEMA, Camera from homeassistant.components.camera import PLATFORM_SCHEMA, Camera
from homeassistant.components.ffmpeg import DATA_FFMPEG from homeassistant.components.ffmpeg import get_ffmpeg_manager
from homeassistant.const import ATTR_BATTERY_LEVEL from homeassistant.const import ATTR_BATTERY_LEVEL
from homeassistant.helpers.aiohttp_client import async_aiohttp_proxy_stream from homeassistant.helpers.aiohttp_client import async_aiohttp_proxy_stream
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -59,7 +59,7 @@ class ArloCam(Camera):
self._camera = camera self._camera = camera
self._attr_name = camera.name self._attr_name = camera.name
self._motion_status = False self._motion_status = False
self._ffmpeg = hass.data[DATA_FFMPEG] self._ffmpeg = get_ffmpeg_manager(hass)
self._ffmpeg_arguments = device_info.get(CONF_FFMPEG_ARGUMENTS) self._ffmpeg_arguments = device_info.get(CONF_FFMPEG_ARGUMENTS)
self._last_refresh = None self._last_refresh = None
self.attrs = {} self.attrs = {}

View File

@ -15,7 +15,7 @@ from homeassistant.components.camera import (
PLATFORM_SCHEMA as PARENT_PLATFORM_SCHEMA, PLATFORM_SCHEMA as PARENT_PLATFORM_SCHEMA,
Camera, Camera,
) )
from homeassistant.components.ffmpeg import DATA_FFMPEG, FFmpegManager from homeassistant.components.ffmpeg import FFmpegManager, get_ffmpeg_manager
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers import config_validation as cv from homeassistant.helpers import config_validation as cv
@ -94,7 +94,7 @@ class CanaryCamera(CoordinatorEntity, Camera):
"""Initialize a Canary security camera.""" """Initialize a Canary security camera."""
super().__init__(coordinator) super().__init__(coordinator)
Camera.__init__(self) Camera.__init__(self)
self._ffmpeg: FFmpegManager = hass.data[DATA_FFMPEG] self._ffmpeg: FFmpegManager = get_ffmpeg_manager(hass)
self._ffmpeg_arguments = ffmpeg_args self._ffmpeg_arguments = ffmpeg_args
self._location_id = location_id self._location_id = location_id
self._device = device self._device = device

View File

@ -8,7 +8,7 @@ import voluptuous as vol
from homeassistant.components import ffmpeg from homeassistant.components import ffmpeg
from homeassistant.components.camera import PLATFORM_SCHEMA, SUPPORT_STREAM, Camera from homeassistant.components.camera import PLATFORM_SCHEMA, SUPPORT_STREAM, Camera
from homeassistant.components.ffmpeg import DATA_FFMPEG from homeassistant.components.ffmpeg import get_ffmpeg_manager
from homeassistant.config_entries import ( from homeassistant.config_entries import (
SOURCE_DISCOVERY, SOURCE_DISCOVERY,
SOURCE_IGNORE, SOURCE_IGNORE,
@ -249,7 +249,7 @@ class EzvizCamera(EzvizEntity, Camera):
self._rtsp_stream = camera_rtsp_stream self._rtsp_stream = camera_rtsp_stream
self._local_rtsp_port = local_rtsp_port self._local_rtsp_port = local_rtsp_port
self._ffmpeg_arguments = ffmpeg_arguments self._ffmpeg_arguments = ffmpeg_arguments
self._ffmpeg = hass.data[DATA_FFMPEG] self._ffmpeg = get_ffmpeg_manager(hass)
self._attr_unique_id = serial self._attr_unique_id = serial
self._attr_name = self.data["name"] self._attr_name = self.data["name"]

View File

@ -90,6 +90,14 @@ async def async_setup(hass, config):
return True return True
@bind_hass
def get_ffmpeg_manager(hass: HomeAssistant) -> FFmpegManager:
"""Return the FFmpegManager."""
if DATA_FFMPEG not in hass.data:
raise ValueError("ffmpeg component not initialized")
return hass.data[DATA_FFMPEG]
@bind_hass @bind_hass
async def async_get_image( async def async_get_image(
hass: HomeAssistant, hass: HomeAssistant,

View File

@ -11,8 +11,8 @@ from homeassistant.components.ffmpeg import (
CONF_EXTRA_ARGUMENTS, CONF_EXTRA_ARGUMENTS,
CONF_INITIAL_STATE, CONF_INITIAL_STATE,
CONF_INPUT, CONF_INPUT,
DATA_FFMPEG,
FFmpegBase, FFmpegBase,
get_ffmpeg_manager,
) )
from homeassistant.const import CONF_NAME, CONF_REPEAT from homeassistant.const import CONF_NAME, CONF_REPEAT
from homeassistant.core import callback from homeassistant.core import callback
@ -49,7 +49,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): async def async_setup_platform(hass, config, async_add_entities, discovery_info=None):
"""Set up the FFmpeg binary motion sensor.""" """Set up the FFmpeg binary motion sensor."""
manager = hass.data[DATA_FFMPEG] manager = get_ffmpeg_manager(hass)
entity = FFmpegMotion(hass, manager, config) entity = FFmpegMotion(hass, manager, config)
async_add_entities([entity]) async_add_entities([entity])

View File

@ -11,7 +11,7 @@ from homeassistant.components.ffmpeg import (
CONF_INITIAL_STATE, CONF_INITIAL_STATE,
CONF_INPUT, CONF_INPUT,
CONF_OUTPUT, CONF_OUTPUT,
DATA_FFMPEG, get_ffmpeg_manager,
) )
from homeassistant.components.ffmpeg_motion.binary_sensor import FFmpegBinarySensor from homeassistant.components.ffmpeg_motion.binary_sensor import FFmpegBinarySensor
from homeassistant.const import CONF_NAME from homeassistant.const import CONF_NAME
@ -44,7 +44,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): async def async_setup_platform(hass, config, async_add_entities, discovery_info=None):
"""Set up the FFmpeg noise binary sensor.""" """Set up the FFmpeg noise binary sensor."""
manager = hass.data[DATA_FFMPEG] manager = get_ffmpeg_manager(hass)
entity = FFmpegNoise(hass, manager, config) entity = FFmpegNoise(hass, manager, config)
async_add_entities([entity]) async_add_entities([entity])

View File

@ -11,7 +11,7 @@ from pyhap.camera import (
) )
from pyhap.const import CATEGORY_CAMERA from pyhap.const import CATEGORY_CAMERA
from homeassistant.components.ffmpeg import DATA_FFMPEG from homeassistant.components.ffmpeg import get_ffmpeg_manager
from homeassistant.const import STATE_ON from homeassistant.const import STATE_ON
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers.event import ( from homeassistant.helpers.event import (
@ -139,7 +139,7 @@ class Camera(HomeAccessory, PyhapCamera):
def __init__(self, hass, driver, name, entity_id, aid, config): def __init__(self, hass, driver, name, entity_id, aid, config):
"""Initialize a Camera accessory object.""" """Initialize a Camera accessory object."""
self._ffmpeg = hass.data[DATA_FFMPEG] self._ffmpeg = get_ffmpeg_manager(hass)
for config_key, conf in CONFIG_DEFAULTS.items(): for config_key, conf in CONFIG_DEFAULTS.items():
if config_key not in config: if config_key not in config:
config[config_key] = conf config[config_key] = conf

View File

@ -5,7 +5,7 @@ from datetime import timedelta
import logging import logging
from homeassistant.components.camera import ATTR_ENTITY_ID, SUPPORT_ON_OFF, Camera from homeassistant.components.camera import ATTR_ENTITY_ID, SUPPORT_ON_OFF, Camera
from homeassistant.components.ffmpeg import DATA_FFMPEG from homeassistant.components.ffmpeg import get_ffmpeg_manager
from homeassistant.const import ( from homeassistant.const import (
ATTR_ATTRIBUTION, ATTR_ATTRIBUTION,
ATTR_BATTERY_CHARGING, ATTR_BATTERY_CHARGING,
@ -40,7 +40,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
async def async_setup_entry(hass, entry, async_add_entities): async def async_setup_entry(hass, entry, async_add_entities):
"""Set up a Logi Circle Camera based on a config entry.""" """Set up a Logi Circle Camera based on a config entry."""
devices = await hass.data[LOGI_CIRCLE_DOMAIN].cameras devices = await hass.data[LOGI_CIRCLE_DOMAIN].cameras
ffmpeg = hass.data[DATA_FFMPEG] ffmpeg = get_ffmpeg_manager(hass)
cameras = [LogiCam(device, entry, ffmpeg) for device in devices] cameras = [LogiCam(device, entry, ffmpeg) for device in devices]

View File

@ -8,7 +8,7 @@ from yarl import URL
from homeassistant.components import ffmpeg from homeassistant.components import ffmpeg
from homeassistant.components.camera import SUPPORT_STREAM, Camera from homeassistant.components.camera import SUPPORT_STREAM, Camera
from homeassistant.components.ffmpeg import CONF_EXTRA_ARGUMENTS, DATA_FFMPEG from homeassistant.components.ffmpeg import CONF_EXTRA_ARGUMENTS, get_ffmpeg_manager
from homeassistant.const import HTTP_BASIC_AUTHENTICATION from homeassistant.const import HTTP_BASIC_AUTHENTICATION
from homeassistant.helpers import config_validation as cv, entity_platform from homeassistant.helpers import config_validation as cv, entity_platform
from homeassistant.helpers.aiohttp_client import async_aiohttp_proxy_stream from homeassistant.helpers.aiohttp_client import async_aiohttp_proxy_stream
@ -153,7 +153,7 @@ class ONVIFCameraEntity(ONVIFBaseEntity, Camera):
"""Generate an HTTP MJPEG stream from the camera.""" """Generate an HTTP MJPEG stream from the camera."""
LOGGER.debug("Handling mjpeg stream from camera '%s'", self.device.name) LOGGER.debug("Handling mjpeg stream from camera '%s'", self.device.name)
ffmpeg_manager = self.hass.data[DATA_FFMPEG] ffmpeg_manager = get_ffmpeg_manager(self.hass)
stream = CameraMjpeg(ffmpeg_manager.binary) stream = CameraMjpeg(ffmpeg_manager.binary)
await stream.open_camera( await stream.open_camera(

View File

@ -9,7 +9,7 @@ import voluptuous as vol
from homeassistant.components import ffmpeg from homeassistant.components import ffmpeg
from homeassistant.components.camera import PLATFORM_SCHEMA, Camera from homeassistant.components.camera import PLATFORM_SCHEMA, Camera
from homeassistant.components.ffmpeg import DATA_FFMPEG from homeassistant.components.ffmpeg import get_ffmpeg_manager
from homeassistant.const import ( from homeassistant.const import (
CONF_HOST, CONF_HOST,
CONF_NAME, CONF_NAME,
@ -65,7 +65,7 @@ class XiaomiCamera(Camera):
self._extra_arguments = config.get(CONF_FFMPEG_ARGUMENTS) self._extra_arguments = config.get(CONF_FFMPEG_ARGUMENTS)
self._last_image = None self._last_image = None
self._last_url = None self._last_url = None
self._manager = hass.data[DATA_FFMPEG] self._manager = get_ffmpeg_manager(hass)
self._name = config[CONF_NAME] self._name = config[CONF_NAME]
self.host = config[CONF_HOST] self.host = config[CONF_HOST]
self.host.hass = hass self.host.hass = hass

View File

@ -9,7 +9,7 @@ import voluptuous as vol
from homeassistant.components import ffmpeg from homeassistant.components import ffmpeg
from homeassistant.components.camera import PLATFORM_SCHEMA, Camera from homeassistant.components.camera import PLATFORM_SCHEMA, Camera
from homeassistant.components.ffmpeg import DATA_FFMPEG from homeassistant.components.ffmpeg import get_ffmpeg_manager
from homeassistant.const import ( from homeassistant.const import (
CONF_HOST, CONF_HOST,
CONF_NAME, CONF_NAME,
@ -60,7 +60,7 @@ class YiCamera(Camera):
self._extra_arguments = config.get(CONF_FFMPEG_ARGUMENTS) self._extra_arguments = config.get(CONF_FFMPEG_ARGUMENTS)
self._last_image = None self._last_image = None
self._last_url = None self._last_url = None
self._manager = hass.data[DATA_FFMPEG] self._manager = get_ffmpeg_manager(hass)
self._name = config[CONF_NAME] self._name = config[CONF_NAME]
self._is_on = True self._is_on = True
self.host = config[CONF_HOST] self.host = config[CONF_HOST]