X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=input.h;fp=input.h;h=c293071ecfa7a9f7aae9562905841cac690dc040;hp=0000000000000000000000000000000000000000;hb=519ddcdf0458032a2024d7acc57642fe27829dc0;hpb=97bdb597d4847308ce9d6982505b56a3a09e930b diff --git a/input.h b/input.h new file mode 100644 index 0000000..c293071 --- /dev/null +++ b/input.h @@ -0,0 +1,38 @@ +#ifndef _INPUT_H +#define _INPUT_H 1 + +#include +#include + +class Input { +public: + Input(const std::string &stream_id); + + // Connect to the given URL and start streaming. + // WARNING: Currently this blocks; it does not run in a separate thread! + void run(const std::string &url); + +private: + // Recovers the this pointer and calls curl_callback(). + static size_t curl_callback_thunk(char *ptr, size_t size, size_t nmemb, void *userdata); + + // Stores the given data, looks for Metacube blocks (skipping data if needed), + // and calls process_block() for each one. + void curl_callback(char *ptr, size_t bytes); + void process_block(const char *data, uint32_t size, uint32_t flags); + + // Drops bytes from the head of , + // and outputs a warning. + void drop_pending_data(size_t num_bytes); + + std::string stream_id; + + // Data we have received but not fully processed yet. + std::vector pending_data; + + // If starts with a Metacube header, + // this is true. + bool has_metacube_header; +}; + +#endif // !defined(_INPUT_H)