This repository has been archived on 2024-05-02. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
2022-04-05 11:42:28 +03:00

107 lines
2.5 KiB
C++

#pragma once
#include <pangolin/display/window.h>
#include <pangolin/platform.h>
#include <pangolin/video/video_input.h>
#include <functional>
#include <mutex>
#include <string>
#include <thread>
namespace pangolin
{
PANGOLIN_EXPORT
class VideoViewer
{
public:
typedef std::function<void(const unsigned char* data,
const std::vector<Image<unsigned char> >& images,
const picojson::value& properties)> FrameChangedCallbackFn;
static constexpr int FRAME_SKIP = 30;
VideoViewer(const std::string& window_name, const std::string& input_uri, const std::string& output_uri = "video.pango" );
VideoViewer(const VideoViewer&) = delete;
virtual ~VideoViewer();
void Run();
void RunAsync();
void Quit();
void QuitAndWait();
inline int TotalFrames() const
{
return video_playback ? video_playback->GetTotalFrames() : std::numeric_limits<int>::max();
}
// Control playback
void OpenInput(const std::string& input_uri);
void CloseInput();
// Control recording
void Record();
void RecordOneFrame();
void StopRecording();
// Useful for user-control
void TogglePlay();
void ToggleRecord();
void ToggleDiscardBufferedFrames();
void ToggleWaitForFrames();
void SetDiscardBufferedFrames(bool new_state);
void SetWaitForFrames(bool new_state);
void Skip(int frames);
bool ChangeExposure(int delta_us);
bool ChangeGain(float delta);
void SetActiveCamera(int delta);
void DrawEveryNFrames(int n);
// Register to be notified of new image data
void SetFrameChangedCallback(FrameChangedCallbackFn cb);
void WaitUntilExit();
VideoInput& Video() {return video;}
const VideoInput& Video() const {return video;}
void SetRecordNthFrame(int record_nth_frame_) {
record_nth_frame = record_nth_frame_;
}
protected:
void RegisterDefaultKeyShortcutsAndPangoVariables();
std::mutex control_mutex;
std::string window_name;
std::thread vv_thread;
VideoInput video;
VideoPlaybackInterface* video_playback;
VideoInterface* video_interface;
std::string output_uri;
int current_frame;
int grab_until;
int record_nth_frame;
int draw_nth_frame;
bool video_grab_wait;
bool video_grab_newest;
bool should_run;
uint16_t active_cam;
FrameChangedCallbackFn frame_changed_callback;
};
void PANGOLIN_EXPORT RunVideoViewerUI(const std::string& input_uri, const std::string& output_uri);
}