gstreamer
Loading...
Searching...
No Matches
gSROCrate.h
Go to the documentation of this file.
1#pragma once
2
3#include "gSROPlugin.h"
4
5#include <functional>
6#include <exception>
7#include <memory>
8
29{
31 std::size_t queue_messages = 1024;
33 std::size_t queue_bytes = 4 * 1024 * 1024;
35 std::size_t pending_payloads = 65536;
37 std::size_t pending_bytes = 64 * 1024 * 1024;
38};
39
42{
43 std::unique_ptr<GSROFrameSink> sink;
44 std::unique_ptr<GSROCratePlugin> plugin;
45};
46
72{
73public:
74 using ResourceFactory = std::function<GSROCrateResources()>;
75 using DeliveryCallback = std::function<void(GSROEventId, std::uint64_t)>;
76 using FailureCallback = std::function<void(std::exception_ptr)>;
77
78 GSROCrate(GSROCrateId crate_id, ResourceFactory make_resources,
79 GSROCrateLimits limits = {}, DeliveryCallback on_delivery = {}, FailureCallback on_failure = {});
80 ~GSROCrate();
81
82 GSROCrate(const GSROCrate&) = delete;
83 GSROCrate& operator=(const GSROCrate&) = delete;
84 GSROCrate(GSROCrate&&) = delete;
86
88 void enqueue_payload(GSROPayload payload);
89
91 void advance_time(GSROTime safe_time);
92
94 void request_finish(GSROEndContext context);
95
97 void cancel(std::exception_ptr error);
98
106 void finish_and_join(GSROEndContext context);
107
109 void rethrow_if_failed() const;
110
111private:
112 class Impl;
113 std::unique_ptr<Impl> impl;
114};
void cancel(std::exception_ptr error)
Fail input and wake waiters. Cleanup runs on the crate thread after any executing callback returns.
Definition gSROCrate.cc:236
void enqueue_payload(GSROPayload payload)
Transfers ownership. Rejects null data, wrong crates, oversized input, and timestamps before a bounda...
Definition gSROCrate.cc:233
std::function< void(std::exception_ptr)> FailureCallback
Definition gSROCrate.h:76
GSROCrate & operator=(const GSROCrate &)=delete
void advance_time(GSROTime safe_time)
Queue a nondecreasing boundary after all earlier input has been submitted. Equality is permitted.
Definition gSROCrate.cc:234
GSROCrate & operator=(GSROCrate &&)=delete
GSROCrate(GSROCrateId crate_id, ResourceFactory make_resources, GSROCrateLimits limits={}, DeliveryCallback on_delivery={}, FailureCallback on_failure={})
Definition gSROCrate.cc:223
GSROCrate(const GSROCrate &)=delete
GSROCrate(GSROCrate &&)=delete
void rethrow_if_failed() const
Check for a background failure without waiting. Failure also wakes and rejects queued producers.
Definition gSROCrate.cc:238
std::function< GSROCrateResources()> ResourceFactory
Definition gSROCrate.h:74
void request_finish(GSROEndContext context)
Close input and wake producers without joining; permits a service to stop every crate before waiting.
Definition gSROCrate.cc:235
void finish_and_join(GSROEndContext context)
Definition gSROCrate.cc:237
std::function< void(GSROEventId, std::uint64_t)> DeliveryCallback
Definition gSROCrate.h:75
std::chrono::duration< std::int64_t, std::nano > GSROTime
Definition gSROData.h:20
std::uint32_t GSROCrateId
Definition gSROData.h:18
std::uint64_t GSROEventId
Definition gSROData.h:19
Implementation contracts for SRO timing, crate processing, and frame output.
Per-crate bounds preventing asynchronous delivery from consuming unlimited memory.
Definition gSROCrate.h:29
std::size_t queue_messages
Maximum queued payload/progress messages; producers wait when the queue is full.
Definition gSROCrate.h:31
std::size_t queue_bytes
Maximum accounted payload bytes in the input queue; producers wait until their payload fits.
Definition gSROCrate.h:33
std::size_t pending_bytes
Maximum accounted payload bytes awaiting time ordering; exceeding this fails the crate.
Definition gSROCrate.h:37
std::size_t pending_payloads
Maximum payloads awaiting time ordering; exceeding this fails the crate.
Definition gSROCrate.h:35
Declare the sink first so the plugin referencing it is destroyed first.
Definition gSROCrate.h:42
std::unique_ptr< GSROFrameSink > sink
Definition gSROCrate.h:43
std::unique_ptr< GSROCratePlugin > plugin
Definition gSROCrate.h:44
Input-delivery state passed to the implementation at orderly shutdown.
Definition gSROData.h:94
One worker-produced contribution, transferred by move to its destination crate.
Definition gSROData.h:58