Extract the current frame(s) into the container's processed_data.
141{
144 "FrameAccessProcessor not prepared for processing");
145 return;
146 }
147
149 if (!source_container || source_container.get() != container.get()) {
151 "FrameAccessProcessor: source container mismatch or expired");
152 return;
153 }
154
157
158 try {
161
166 }
168 }
169
170 if (frames_to_extract == 0) {
172 return;
173 }
174
175 auto video_container = std::dynamic_pointer_cast<VideoStreamContainer>(source_container);
176 if (!video_container) {
178 "FrameAccessProcessor: container is not a VideoStreamContainer");
180 return;
181 }
182
184
185 auto& processed_data_vector = container->get_processed_data();
186 processed_data_vector.resize(1);
187
188 auto* dest = std::get_if<std::vector<uint8_t>>(&processed_data_vector[0]);
189 if (!dest) {
190 processed_data_vector[0] = std::vector<uint8_t>();
191 dest = std::get_if<std::vector<uint8_t>>(&processed_data_vector[0]);
192 }
193 dest->resize(byte_count);
194
195 uint8_t* write_ptr = dest->data();
196 bool all_ok = true;
197
198 for (uint64_t i = 0; i < frames_to_extract; ++i) {
202 all_ok = false;
203 } else {
205 }
207 }
208
209 if (!all_ok) {
211 "FrameAccessProcessor: one or more frames unavailable at frame {}",
213 }
214
216 if (!all_ok) {
218 "FrameAccessProcessor: auto-advance enabled but frame data was incomplete. Waiting for next process call without advancing frame.");
219 }
223 if (frames_to_advance > 0) {
226 }
227 } else {
229 }
230 }
231
232 } catch (const std::exception& e) {
234 "FrameAccessProcessor::process failed: {}", e.what());
235 }
236
238}
#define MF_RT_ERROR(comp, ctx,...)
const std::vector< float > * pixels
std::chrono::steady_clock::time_point m_last_process_time
void advance_frame(uint64_t frames_to_advance)
Advance the frame cursor, respecting loop boundaries.
uint64_t m_frame_byte_size
std::weak_ptr< SignalSourceContainer > m_source_container_weak
uint64_t m_frames_per_batch
double m_frame_accumulator
Sub-frame accumulator for wall-clock-driven advancement.
double m_frame_rate
Cached video frame rate in frames per second.
std::atomic< bool > m_is_processing
@ ContainerProcessing
Container operations (Kakshya - file/stream/region processing)
@ Kakshya
Containers[Signalsource, Stream, File], Regions, DataProcessors.
std::vector< uint64_t > start_coordinates
Starting frame index (inclusive)