11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
18PROMEKI_NAMESPACE_BEGIN
62class RawBitstreamMediaIO :
public SharedThreadMediaIO {
63 PROMEKI_OBJECT(RawBitstreamMediaIO, SharedThreadMediaIO)
66 static inline const MediaIOStats::ID StatsPacketsWritten{
"PacketsWritten"};
69 static inline const MediaIOStats::ID StatsBytesWritten{
"BytesWritten"};
71 RawBitstreamMediaIO(ObjectBase *parent =
nullptr);
72 ~RawBitstreamMediaIO()
override;
74 Error describe(MediaIODescription *out)
const override;
75 Error proposeInput(
const MediaDesc &offered, MediaDesc *preferred)
const override;
78 Error executeCmd(MediaIOCommandOpen &cmd)
override;
79 Error executeCmd(MediaIOCommandClose &cmd)
override;
80 Error executeCmd(MediaIOCommandWrite &cmd)
override;
81 Error executeCmd(MediaIOCommandStats &cmd)
override;
86 int64_t _packetsWritten = 0;
87 int64_t _bytesWritten = 0;
88 bool _warnedNoPackets =
false;
95class RawBitstreamFactory :
public MediaIOFactory {
97 RawBitstreamFactory() =
default;
99 String name()
const override {
return String(
"RawBitstream"); }
100 String displayName()
const override {
return String(
"Raw Bitstream"); }
101 String description()
const override {
102 return String(
"Raw elementary-stream sink (H.264 / HEVC Annex-B — writes packet payloads "
105 StringList extensions()
const override {
106 return {String(
"h264"), String(
"h265"), String(
"hevc"), String(
"bit")};
108 bool canBeSink()
const override {
return true; }
110 Config::SpecMap configSpecs()
const override;
111 MediaIO *create(
const Config &config, ObjectBase *parent =
nullptr)
const override;