blob: b6784dc94a8371ca558f7935a65858e782fd10e5 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_CAMERA_DRIVERS_CONTROLLER_SHERLOCK_VIDEO_CONFERENCING_CONFIG_H_
#define SRC_CAMERA_DRIVERS_CONTROLLER_SHERLOCK_VIDEO_CONFERENCING_CONFIG_H_
#include <fuchsia/camera2/hal/cpp/fidl.h>
#include <fuchsia/sysmem/cpp/fidl.h>
#include <vector>
#include "src/camera/drivers/controller/configs/internal_config.h"
#include "src/camera/drivers/controller/sherlock/common_util.h"
#include "src/camera/lib/stream_utils/stream_constraints.h"
// Config 2: Video conferencing configuration.
// Stream 0: ML | FR | VIDEO
// Stream 1: VIDEO
// Config 3: Video conferencing configuration.
// Stream 0: ML | FR | VIDEO | EXTENDED_FOV
// Stream 1: VIDEO | EXTENDED_FOV
namespace camera {
namespace {
constexpr fuchsia::sysmem::PixelFormatType kFramePixelFormat =
fuchsia::sysmem::PixelFormatType::NV12;
// Isp FR parameters
constexpr uint32_t kIspFRWidth = 2176;
constexpr uint32_t kIspFRHeight = 2720;
// GDC parameters
constexpr uint32_t kGdcFRWidth = 2240;
constexpr uint32_t kGdcFRHeight = 1792;
// ML Video FR Parameters
// ISP needs to hold on to 3 frames at any given point
// DMA module has a queue for 3 frames - current, done & delay frame.
constexpr uint32_t kMlFRMinBufferForCamping = 3;
// GDC needs to hold on to 1 frame for processing.
constexpr uint32_t kGdcBufferForCamping = 1;
constexpr uint32_t kMlFRWidth = 640;
constexpr uint32_t kMlFRHeight = 512;
constexpr uint32_t kMlFRFrameRate = 5;
// Video Conferencing FR Parameters
constexpr uint32_t kVideoMinBufferForCamping = 3;
constexpr uint32_t kVideoWidth = 1280;
constexpr uint32_t kVideoHeight = 720;
constexpr uint32_t kVideoWidth1 = 896;
constexpr uint32_t kVideoHeight1 = 504;
constexpr uint32_t kVideoWidth2 = 640;
constexpr uint32_t kVideoHeight2 = 360;
constexpr uint32_t kVideoFrameRate = 30;
constexpr auto kMlStreamType = fuchsia::camera2::CameraStreamType::FULL_RESOLUTION |
fuchsia::camera2::CameraStreamType::MACHINE_LEARNING |
fuchsia::camera2::CameraStreamType::VIDEO_CONFERENCE;
constexpr auto kVideoStreamType = fuchsia::camera2::CameraStreamType::VIDEO_CONFERENCE;
} // namespace
// Returns the internal video conferencing configuration (FR).
InternalConfigNode VideoConfigFullRes(bool extended_fov);
// Return the external video conferencing configuration.
fuchsia::camera2::hal::Config VideoConferencingConfig(bool extended_fov);
constexpr FrameRateRange kVideoFrameRateRange = {
.min =
{
.frames_per_sec_numerator = kVideoFrameRate,
.frames_per_sec_denominator = 1,
},
.max =
{
.frames_per_sec_numerator = kVideoFrameRate,
.frames_per_sec_denominator = 1,
},
};
} // namespace camera
#endif // SRC_CAMERA_DRIVERS_CONTROLLER_SHERLOCK_VIDEO_CONFERENCING_CONFIG_H_