EigerStream.h 2.43 KB
Newer Older
Sebastien Petitdemange's avatar
Sebastien Petitdemange committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//###########################################################################
// This file is part of LImA, a Library for Image Acquisition
//
// Copyright (C) : 2009-2015
// European Synchrotron Radiation Facility
// BP 220, Grenoble 38043
// FRANCE
//
// This is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.
//
// This software is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, see <http://www.gnu.org/licenses/>.
//###########################################################################
#ifndef EIGERSTREAM_H
#define EIGERSTREAM_H

#include "lima/Debug.h"

#include "EigerCamera.h"
#include "lima/HwBufferMgr.h"

namespace lima
{
  namespace Eiger
  {
    class Stream
    {
      DEB_CLASS_NAMESPC(DebModCamera,"Stream","Eiger");
    public:
      class Message;
      enum HeaderDetail {ALL,BASIC,OFF};

      Stream(Camera&);
      ~Stream();

      void start();
      void stop();
      bool isRunning() const;
47
48
49

      void getCompressionType(Camera::CompressionType& type) const;

Sebastien Petitdemange's avatar
Sebastien Petitdemange committed
50
51
52
53
54
55
56
      void getHeaderDetail(HeaderDetail&) const;
      void setHeaderDetail(HeaderDetail);
      
      void setActive(bool);
      bool isActive() const;

      HwBufferCtrlObj* getBufferCtrlObj();
57
58
      bool get_msg(void* aDataBuffer,void*& msg_data,size_t& msg_size,
		   int& depth);
Sebastien Petitdemange's avatar
Sebastien Petitdemange committed
59
60
61
62
63
64
65
66
    private:
      class _BufferCallback;
      class _BufferCtrlObj;
      friend class _BufferCtrlObj;

      static void* _runFunc(void*);
      void _run();
      void _send_synchro();
67
68
69
70
71

      void _checkEncoding(const std::string& encoding,
			  ImageType image_type,
			  Camera::CompressionType& comp_type);

Sebastien Petitdemange's avatar
Sebastien Petitdemange committed
72
      Camera&		m_cam;
73
      char		m_endianess;
Sebastien Petitdemange's avatar
Sebastien Petitdemange committed
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
      bool		m_active;
      HeaderDetail	m_header_detail;
      bool		m_dirty_flag;

      mutable Cond	m_cond;
      bool		m_wait;
      bool		m_running;
      bool		m_stop;

      pthread_t		m_thread_id;
      void*		m_zmq_context;
      int		m_pipes[2];
      _BufferCallback*	m_buffer_cbk;
      _BufferCtrlObj*	m_buffer_ctrl_obj;
    };
  }
}
#endif	// EIGERSTREAM_H