21#include <libavutil/pixfmt.h>
25#include "../video_device.h"
45 VideoDeviceImpl(
const std::string&
path,
46 const std::vector<std::map<std::string, std::string>>&
devInfo);
62 std::vector<std::string> formats_ {};
63 std::vector<VideoSize> sizes_ {};
64 std::vector<FrameRate> rates_ {};
66 const ios_fmt* fmt_ {
nullptr};
72VideoDeviceImpl::selectFormat()
75 for (
auto fmt : formats_) {
86 JAMI_WARN(
"Video: No format matching %s", fmt.c_str());
94 JAMI_ERR(
"Video: Unable to find a known format to use");
99 const std::vector<std::map<std::string, std::string>>&
devInfo)
103 formats_.emplace_back(
setting.at(
"format"));
104 sizes_.emplace_back(std::stoi(
setting.at(
"width")), std::stoi(
setting.at(
"height")));
105 rates_.emplace_back(std::stoi(
setting.at(
"rate")), 1);
111VideoDeviceImpl::getSize(
VideoSize size)
const
113 for (
const auto&
iter : sizes_) {
118 return sizes_.empty() ?
VideoSize {0, 0} : sizes_.back();
124 for (
const auto&
iter : rates_) {
129 return rates_.empty() ?
FrameRate {0, 0} : rates_.back();
132std::vector<VideoSize>
138std::vector<FrameRate>
153 params.pixel_format =
"nv12";
154 params.width = size_.first;
155 params.height = size_.second;
165 rate_ = getRate(
params.framerate);
170 const std::vector<std::map<std::string, std::string>>&
devInfo)
171 : deviceImpl_(
new VideoDeviceImpl(path,
devInfo))
174 name = deviceImpl_->name;
180 return deviceImpl_->getDeviceParams();
184VideoDevice::setDeviceParams(
const DeviceParams&
params)
186 return deviceImpl_->setDeviceParams(
params);
189std::vector<std::string>
195std::vector<VideoSize>
196VideoDevice::getSizeList(
const std::string& channel)
const
198 return deviceImpl_->getSizeList();
201std::vector<FrameRate>
202VideoDevice::getRateList(
const std::string& channel,
VideoSize size)
const
204 return deviceImpl_->getRateList();
std::vector< VideoSize > getSizeList() const
VideoDeviceImpl(const std::string &path)
void setDeviceParams(const DeviceParams &)
DeviceParams getDeviceParams() const
std::vector< FrameRate > getRateList() const
std::vector< std::string > getChannelList() const
VideoDevice(const std::string &path, const std::vector< std::map< std::string, std::string > > &devInfo)
DeviceParams getDeviceParams() const
Returns the parameters needed for actual use of the device.
static const std::array< ios_fmt, 4 > ios_formats
std::pair< unsigned, unsigned > VideoSize
rational< double > FrameRate
void emitSignal(Args... args)
DeviceParams Parameters used by MediaDecoder and MediaEncoder to open a LibAV device/stream.
enum AVPixelFormat pixfmt