#ifndef CHROMECAST_PUBLIC_MEDIA_MEDIA_PIPELINE_DEVICE_PARAMS_H_
#define CHROMECAST_PUBLIC_MEDIA_MEDIA_PIPELINE_DEVICE_PARAMS_H_
#include <stdint.h>
#include <ostream>
#include <string>
#include "chromecast/public/volume_control.h"
namespace service_manager {
class Connector;
}
namespace chromecast {
class TaskRunner;
namespace media {
enum class AudioChannel {
kAll = 0,
kLeft = 1,
kRight = 2,
};
struct MediaPipelineDeviceParams {
enum MediaSyncType {
kModeSyncPts = 0,
kModeIgnorePts = 1,
kModeIgnorePtsAndVSync = 2,
kModeApkSyncPts = 3,
};
enum AudioStreamType {
kAudioStreamNormal = 0,
kAudioStreamSoundEffects = 1,
};
MediaPipelineDeviceParams();
MediaPipelineDeviceParams(TaskRunner* task_runner_in,
AudioContentType content_type_in,
const std::string& device_id_in);
MediaPipelineDeviceParams(MediaSyncType sync_type_in,
TaskRunner* task_runner_in,
AudioContentType content_type_in,
const std::string& device_id_in);
MediaPipelineDeviceParams(MediaSyncType sync_type_in,
AudioStreamType audio_type_in,
TaskRunner* task_runner_in,
AudioContentType content_type_in,
const std::string& device_id_in);
MediaPipelineDeviceParams(const MediaPipelineDeviceParams& other);
MediaPipelineDeviceParams& operator=(const MediaPipelineDeviceParams& other);
MediaPipelineDeviceParams(MediaPipelineDeviceParams&& other);
MediaPipelineDeviceParams& operator=(MediaPipelineDeviceParams&& other);
MediaSyncType sync_type = kModeSyncPts;
AudioStreamType audio_type = kAudioStreamNormal;
bool pass_through_audio_support_desired = false;
TaskRunner* task_runner = nullptr;
service_manager::Connector* connector = nullptr;
AudioContentType content_type = AudioContentType::kMedia;
std::string device_id;
std::string session_id;
bool multiroom = false;
AudioChannel audio_channel = AudioChannel::kAll;
int64_t output_delay_us = 0;
};
inline MediaPipelineDeviceParams::MediaPipelineDeviceParams() = default;
inline MediaPipelineDeviceParams::MediaPipelineDeviceParams(
TaskRunner* task_runner_in,
AudioContentType content_type_in,
const std::string& device_id_in)
: task_runner(task_runner_in),
content_type(content_type_in),
device_id(device_id_in) {}
inline MediaPipelineDeviceParams::MediaPipelineDeviceParams(
MediaSyncType sync_type_in,
TaskRunner* task_runner_in,
AudioContentType content_type_in,
const std::string& device_id_in)
: sync_type(sync_type_in),
task_runner(task_runner_in),
content_type(content_type_in),
device_id(device_id_in) {}
inline MediaPipelineDeviceParams::MediaPipelineDeviceParams(
MediaSyncType sync_type_in,
AudioStreamType audio_type_in,
TaskRunner* task_runner_in,
AudioContentType content_type_in,
const std::string& device_id_in)
: sync_type(sync_type_in),
audio_type(audio_type_in),
task_runner(task_runner_in),
content_type(content_type_in),
device_id(device_id_in) {}
inline MediaPipelineDeviceParams::MediaPipelineDeviceParams(
const MediaPipelineDeviceParams& other) = default;
inline MediaPipelineDeviceParams& MediaPipelineDeviceParams::operator=(
const MediaPipelineDeviceParams& other) = default;
inline MediaPipelineDeviceParams::MediaPipelineDeviceParams(
MediaPipelineDeviceParams&& other) = default;
inline MediaPipelineDeviceParams& MediaPipelineDeviceParams::operator=(
MediaPipelineDeviceParams&& other) = default;
inline std::ostream& operator<<(std::ostream& os, AudioChannel audio_channel) {
switch (audio_channel) {
case AudioChannel::kAll:
os << "all";
return os;
case AudioChannel::kLeft:
os << "left";
return os;
case AudioChannel::kRight:
os << "right";
return os;
}
os << "unknown";
return os;
}
}
}
#endif