67 bool can_read(
const std::string& filepath)
const override;
69 bool open(
const std::string& filepath,
FileReadOptions options = FileReadOptions::ALL)
override;
70 void close()
override;
71 [[nodiscard]]
bool is_open()
const override;
73 [[nodiscard]] std::optional<FileMetadata> get_metadata()
const override;
74 [[nodiscard]] std::vector<FileRegion> get_regions()
const override;
76 std::vector<Kakshya::DataVariant> read_all()
override;
77 std::vector<Kakshya::DataVariant> read_region(
const FileRegion& region)
override;
80 bool load_into_container(std::shared_ptr<Kakshya::SignalSourceContainer> container)
override;
82 [[nodiscard]] std::vector<uint64_t> get_read_position()
const override;
83 bool seek(
const std::vector<uint64_t>&
position)
override;
85 [[nodiscard]] std::vector<std::string> get_supported_extensions()
const override;
87 [[nodiscard]] std::type_index
get_data_type()
const override {
return typeid(std::vector<uint8_t>); }
88 [[nodiscard]] std::type_index get_container_type()
const override;
90 [[nodiscard]] std::string get_last_error()
const override;
93 [[nodiscard]]
size_t get_num_dimensions()
const override;
94 [[nodiscard]] std::vector<uint64_t> get_dimension_sizes()
const override;
134 m_target_width =
width;
155 return m_audio_container;
188 void signal_decode();
204 void setup_io_service(uint64_t reader_id = 0);
214 void setup_io_service(
const std::shared_ptr<Registry::Service::IOService>& io_service, uint64_t reader_id);
231 uint32_t m_target_width { 0 };
232 uint32_t m_target_height { 0 };
233 uint32_t m_target_sample_rate { 0 };
247 uint32_t m_ring_capacity { 32 };
248 uint32_t m_decode_batch_size { 8 };
249 uint32_t m_refill_threshold { 0 };
250 uint64_t m_reader_id { 0 };
251 bool m_owns_io_service {};
258 std::atomic<bool> m_decode_stop {
false };
259 std::atomic<bool> m_decode_active {
false };
260 std::atomic<uint64_t> m_decode_head { 0 };
261 int m_target_format { -1 };
272 void start_decode_thread();
273 void stop_decode_thread();
274 void decode_thread_func();
287 bool seek_internal(
const std::shared_ptr<FFmpegDemuxContext>& demux,
288 const std::shared_ptr<VideoStreamContext>& video,
289 uint64_t frame_position);
291 void build_metadata(
const std::shared_ptr<FFmpegDemuxContext>& demux,
292 const std::shared_ptr<VideoStreamContext>& video)
const;
294 void build_regions(
const std::shared_ptr<FFmpegDemuxContext>& demux,
295 const std::shared_ptr<VideoStreamContext>& video)
const;
297 void set_error(
const std::string& msg)
const;
298 void clear_error()
const;