11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
26PROMEKI_NAMESPACE_BEGIN
37struct MediaIOPortDescription {
45 using List = ::promeki::List<MediaIOPortDescription>;
63 int portGroupIndex = -1;
75 MediaDesc::List producibleFormats;
87 MediaDesc::List acceptableFormats;
90 MediaDesc preferredFormat;
103struct MediaIOPortGroupDescription {
105 using List = ::promeki::List<MediaIOPortGroupDescription>;
114 FrameCount frameCount;
117 bool canSeek =
false;
128 String clockDescription;
163class MediaIODescription {
164 PROMEKI_SHARED_FINAL(MediaIODescription)
167 using Ptr = SharedPtr<MediaIODescription>;
170 using List = ::promeki::List<MediaIODescription>;
173 using PtrList = ::promeki::List<Ptr>;
181 static constexpr FrameCount FrameCountUnknown = FrameCount::unknown();
184 static constexpr FrameCount FrameCountInfinite = FrameCount::infinity();
187 MediaIODescription() =
default;
194 const String &backendName()
const {
return _backendName; }
197 void setBackendName(
const String &val) { _backendName = val; }
200 const String &backendDescription()
const {
return _backendDescription; }
203 void setBackendDescription(
const String &val) { _backendDescription = val; }
210 const String &name()
const {
return _name; }
213 void setName(
const String &val) { _name = val; }
220 bool canBeSource()
const {
return _canBeSource; }
223 void setCanBeSource(
bool val) { _canBeSource = val; }
226 bool canBeSink()
const {
return _canBeSink; }
229 void setCanBeSink(
bool val) { _canBeSink = val; }
232 bool canBeTransform()
const {
return _canBeTransform; }
235 void setCanBeTransform(
bool val) { _canBeTransform = val; }
249 const MediaDesc::List &producibleFormats()
const {
return _producibleFormats; }
252 MediaDesc::List &producibleFormats() {
return _producibleFormats; }
255 void setProducibleFormats(
const MediaDesc::List &val) { _producibleFormats = val; }
264 const MediaDesc::List &acceptableFormats()
const {
return _acceptableFormats; }
267 MediaDesc::List &acceptableFormats() {
return _acceptableFormats; }
270 void setAcceptableFormats(
const MediaDesc::List &val) { _acceptableFormats = val; }
281 const MediaDesc &preferredFormat()
const {
return _preferredFormat; }
284 void setPreferredFormat(
const MediaDesc &val) { _preferredFormat = val; }
291 bool canSeek()
const {
return _canSeek; }
294 void setCanSeek(
bool val) { _canSeek = val; }
303 const FrameCount &frameCount()
const {
return _frameCount; }
306 void setFrameCount(
const FrameCount &val) { _frameCount = val; }
309 const FrameRate &frameRate()
const {
return _frameRate; }
312 void setFrameRate(
const FrameRate &val) { _frameRate = val; }
315 const Metadata &containerMetadata()
const {
return _containerMetadata; }
318 Metadata &containerMetadata() {
return _containerMetadata; }
321 void setContainerMetadata(
const Metadata &val) { _containerMetadata = val; }
337 Error probeStatus()
const {
return _probeStatus; }
340 void setProbeStatus(Error val) { _probeStatus = val; }
343 const String &probeMessage()
const {
return _probeMessage; }
346 void setProbeMessage(
const String &val) { _probeMessage = val; }
353 const MediaIOPortDescription::List &sources()
const {
return _sources; }
356 MediaIOPortDescription::List &sources() {
return _sources; }
359 void setSources(
const MediaIOPortDescription::List &val) { _sources = val; }
362 const MediaIOPortDescription::List &sinks()
const {
return _sinks; }
365 MediaIOPortDescription::List &sinks() {
return _sinks; }
368 void setSinks(
const MediaIOPortDescription::List &val) { _sinks = val; }
371 const MediaIOPortGroupDescription::List &portGroups()
const {
return _portGroups; }
374 MediaIOPortGroupDescription::List &portGroups() {
return _portGroups; }
377 void setPortGroups(
const MediaIOPortGroupDescription::List &val) { _portGroups = val; }
393 StringList summary()
const;
402 JsonObject toJson()
const;
434 static MediaIODescription fromJson(
const JsonObject &obj, Error *err =
nullptr);
437 bool operator==(
const MediaIODescription &other)
const;
438 bool operator!=(
const MediaIODescription &other)
const {
return !(*
this == other); }
442 String _backendDescription;
446 bool _canBeSource =
false;
447 bool _canBeSink =
false;
448 bool _canBeTransform =
false;
450 MediaDesc::List _producibleFormats;
451 MediaDesc::List _acceptableFormats;
452 MediaDesc _preferredFormat;
454 bool _canSeek =
false;
455 FrameCount _frameCount;
456 FrameRate _frameRate;
457 Metadata _containerMetadata;
459 Error _probeStatus = Error::Ok;
460 String _probeMessage;
462 MediaIOPortDescription::List _sources;
463 MediaIOPortDescription::List _sinks;
464 MediaIOPortGroupDescription::List _portGroups;
468DataStream &operator<<(DataStream &stream,
const MediaIODescription &d);
471DataStream &operator>>(DataStream &stream, MediaIODescription &d);