libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
rawbitstreammediaio.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
13#include <promeki/namespace.h>
16#include <promeki/file.h>
17
18PROMEKI_NAMESPACE_BEGIN
19
62class RawBitstreamMediaIO : public SharedThreadMediaIO {
63 PROMEKI_OBJECT(RawBitstreamMediaIO, SharedThreadMediaIO)
64 public:
66 static inline const MediaIOStats::ID StatsPacketsWritten{"PacketsWritten"};
67
69 static inline const MediaIOStats::ID StatsBytesWritten{"BytesWritten"};
70
71 RawBitstreamMediaIO(ObjectBase *parent = nullptr);
72 ~RawBitstreamMediaIO() override;
73
74 Error describe(MediaIODescription *out) const override;
75 Error proposeInput(const MediaDesc &offered, MediaDesc *preferred) const override;
76
77 protected:
78 Error executeCmd(MediaIOCommandOpen &cmd) override;
79 Error executeCmd(MediaIOCommandClose &cmd) override;
80 Error executeCmd(MediaIOCommandWrite &cmd) override;
81 Error executeCmd(MediaIOCommandStats &cmd) override;
82
83 private:
84 File _file;
85 String _filename;
86 int64_t _packetsWritten = 0;
87 int64_t _bytesWritten = 0;
88 bool _warnedNoPackets = false;
89};
90
95class RawBitstreamFactory : public MediaIOFactory {
96 public:
97 RawBitstreamFactory() = default;
98
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 "
103 "verbatim)");
104 }
105 StringList extensions() const override {
106 return {String("h264"), String("h265"), String("hevc"), String("bit")};
107 }
108 bool canBeSink() const override { return true; }
109
110 Config::SpecMap configSpecs() const override;
111 MediaIO *create(const Config &config, ObjectBase *parent = nullptr) const override;
112};
113
114PROMEKI_NAMESPACE_END
115
116#endif // PROMEKI_ENABLE_PROAV