rogue
Loading...
Searching...
No Matches
FrameLock.cpp
Go to the documentation of this file.
1
17#include "rogue/Directives.h"
18
20
21#include <memory>
22
23#include "rogue/GilRelease.h"
25
27
28#ifndef NO_PYTHON
29 #include <boost/python.hpp>
30namespace bp = boost::python;
31#endif
32
34ris::FrameLockPtr ris::FrameLock::create(ris::FramePtr frame) {
35 ris::FrameLockPtr frameLock = std::make_shared<ris::FrameLock>(frame);
36 return (frameLock);
37}
38
40ris::FrameLock::FrameLock(ris::FramePtr frame) {
42 frame_ = frame;
43 frame_->lock_.lock();
44 locked_ = true;
45}
46
48void ris::FrameLock::setup_python() {
49#ifndef NO_PYTHON
50
51 bp::class_<ris::FrameLock, ris::FrameLockPtr, boost::noncopyable>("FrameLock", bp::no_init)
52 .def("lock", &ris::FrameLock::lock)
53 .def("unlock", &ris::FrameLock::unlock)
54 .def("__enter__", &ris::FrameLock::enter)
55 .def("__exit__", &ris::FrameLock::exit);
56#endif
57}
58
60ris::FrameLock::~FrameLock() {
61 if (locked_) frame_->lock_.unlock();
62}
63
65void ris::FrameLock::lock() {
66 if (!locked_) {
68 frame_->lock_.lock();
69 locked_ = true;
70 }
71}
72
74void ris::FrameLock::unlock() {
75 if (locked_) {
76 frame_->lock_.unlock();
77 locked_ = false;
78 }
79}
80
82void ris::FrameLock::enter() {}
83
85void ris::FrameLock::exit(void*, void*, void*) {}
RAII helper that releases the Python GIL for a scope.
Definition GilRelease.h:36
std::shared_ptr< rogue::interfaces::stream::Frame > FramePtr
Shared pointer alias for Frame.
Definition Frame.h:549
std::shared_ptr< rogue::interfaces::stream::FrameLock > FrameLockPtr
Shared pointer alias for FrameLock.
Definition FrameLock.h:110