MillicastSDK 2.5.0
Loading...
Searching...
No Matches
metadata.h
Go to the documentation of this file.
1#pragma once
2
3#ifdef __cplusplus
4
5#include <array>
6#include <memory>
7#include <optional>
8#include <vector>
9
10#include "exports.h"
11namespace millicast {
12
13enum class SeiMessageType {
14 PIC_TIMING,
15 UNREGISTERED_USER_DATA,
16};
17
18class SeiUserUnregisteredData;
19class SeiPicTiming;
20
25class MILLICAST_API SeiMessage {
26 public:
30 virtual SeiMessageType type() const = 0;
31
37 virtual SeiUserUnregisteredData* sei_user_unregistered_message() {
38 return nullptr;
39 }
40
46 virtual SeiPicTiming* sei_pic_timing_message() { return nullptr; }
47
48 virtual ~SeiMessage() = default;
49};
50
54class MILLICAST_API SeiUserUnregisteredData : public SeiMessage {
55 public:
59 static constexpr unsigned int UUID_SIZE = 16;
60
61 SeiMessageType type() const final;
62
63 SeiUserUnregisteredData* sei_user_unregistered_message() override;
64
69 virtual std::array<uint8_t, UUID_SIZE> uuid() const = 0;
70
75 virtual const std::vector<uint8_t>& user_data() const = 0;
76};
77
83class SeiPicTiming : public SeiMessage {
84 public:
85 SeiMessageType type() const final;
86
87 SeiPicTiming* sei_pic_timing_message() override;
88
92 struct TimeCode {
93 bool full{false};
94 std::optional<uint8_t> seconds;
95 std::optional<uint8_t> minutes;
96 std::optional<uint8_t> hours;
97 };
98
103 virtual std::vector<TimeCode> timecodes() const = 0;
104};
105
109struct MILLICAST_API FrameMetadata {
110 FrameMetadata() = default;
111 FrameMetadata(FrameMetadata&&) = default;
112 FrameMetadata& operator=(FrameMetadata&&) = default;
113 FrameMetadata(const FrameMetadata&) = delete;
114 FrameMetadata& operator=(const FrameMetadata&) = delete;
115
121 std::vector<std::unique_ptr<SeiMessage>> sei_messages;
122
132 uint32_t rtp_timestamp;
133};
134
135} // namespace millicast
136
137#endif // __cplusplus
#define MILLICAST_API
Definition exports.h:51