mirror of
https://github.com/blakeblackshear/frigate.git
synced 2024-11-21 19:07:46 +01:00
Cache camera stream info to speed up future config generations (#11614)
* Cache camera stream info to speed up future config generations * Formatting * fix
This commit is contained in:
parent
cf4517cbdb
commit
d5f6decd30
@ -1,6 +1,5 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import asyncio
|
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
@ -46,9 +45,9 @@ from frigate.util.builtin import (
|
|||||||
get_ffmpeg_arg_list,
|
get_ffmpeg_arg_list,
|
||||||
load_config_with_no_duplicates,
|
load_config_with_no_duplicates,
|
||||||
)
|
)
|
||||||
from frigate.util.config import get_relative_coordinates
|
from frigate.util.config import StreamInfoRetriever, get_relative_coordinates
|
||||||
from frigate.util.image import create_mask
|
from frigate.util.image import create_mask
|
||||||
from frigate.util.services import auto_detect_hwaccel, get_video_properties
|
from frigate.util.services import auto_detect_hwaccel
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -73,6 +72,9 @@ DEFAULT_DETECTORS = {"cpu": {"type": "cpu"}}
|
|||||||
DEFAULT_DETECT_DIMENSIONS = {"width": 1280, "height": 720}
|
DEFAULT_DETECT_DIMENSIONS = {"width": 1280, "height": 720}
|
||||||
DEFAULT_TIME_LAPSE_FFMPEG_ARGS = "-vf setpts=0.04*PTS -r 30"
|
DEFAULT_TIME_LAPSE_FFMPEG_ARGS = "-vf setpts=0.04*PTS -r 30"
|
||||||
|
|
||||||
|
# stream info handler
|
||||||
|
stream_info_retriever = StreamInfoRetriever()
|
||||||
|
|
||||||
|
|
||||||
class FrigateBaseModel(BaseModel):
|
class FrigateBaseModel(BaseModel):
|
||||||
model_config = ConfigDict(extra="forbid", protected_namespaces=())
|
model_config = ConfigDict(extra="forbid", protected_namespaces=())
|
||||||
@ -1416,7 +1418,7 @@ class FrigateConfig(FrigateBaseModel):
|
|||||||
if need_detect_dimensions or need_record_fourcc:
|
if need_detect_dimensions or need_record_fourcc:
|
||||||
stream_info = {"width": 0, "height": 0, "fourcc": None}
|
stream_info = {"width": 0, "height": 0, "fourcc": None}
|
||||||
try:
|
try:
|
||||||
stream_info = asyncio.run(get_video_properties(input.path))
|
stream_info = stream_info_retriever.get_stream_info(input.path)
|
||||||
except Exception:
|
except Exception:
|
||||||
logger.warn(
|
logger.warn(
|
||||||
f"Error detecting stream parameters automatically for {input.path} Applying default values."
|
f"Error detecting stream parameters automatically for {input.path} Applying default values."
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
"""configuration utils."""
|
"""configuration utils."""
|
||||||
|
|
||||||
|
import asyncio
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
@ -8,6 +9,7 @@ from typing import Optional, Union
|
|||||||
from ruamel.yaml import YAML
|
from ruamel.yaml import YAML
|
||||||
|
|
||||||
from frigate.const import CONFIG_DIR, EXPORT_DIR
|
from frigate.const import CONFIG_DIR, EXPORT_DIR
|
||||||
|
from frigate.util.services import get_video_properties
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -194,3 +196,16 @@ def get_relative_coordinates(
|
|||||||
return mask
|
return mask
|
||||||
|
|
||||||
return mask
|
return mask
|
||||||
|
|
||||||
|
|
||||||
|
class StreamInfoRetriever:
|
||||||
|
def __init__(self) -> None:
|
||||||
|
self.stream_cache: dict[str, tuple[int, int]] = {}
|
||||||
|
|
||||||
|
def get_stream_info(self, path: str) -> str:
|
||||||
|
if path in self.stream_cache:
|
||||||
|
return self.stream_cache[path]
|
||||||
|
|
||||||
|
info = asyncio.run(get_video_properties(path))
|
||||||
|
self.stream_cache[path] = info
|
||||||
|
return info
|
||||||
|
Loading…
Reference in New Issue
Block a user