EigerStream.h 2.69 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
//###########################################################################
// 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"
28
#include "EigerStreamInfo.h"
Sebastien Petitdemange's avatar
Sebastien Petitdemange committed
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#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;
48
49
50

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

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

      HwBufferCtrlObj* getBufferCtrlObj();
58

59
60
      bool get_msg(void* aDataBuffer,void*& msg_data,size_t& msg_size,
		   int& depth);
61
62
      void release_msg(void* aDataBuffer);
      void release_all_msgs();
63
64
65

      void getLastStreamInfo(StreamInfo& info);

Sebastien Petitdemange's avatar
Sebastien Petitdemange committed
66
67
68
69
    private:
      class _BufferCtrlObj;
      friend class _BufferCtrlObj;

70
71
72
      typedef std::pair<std::shared_ptr<Stream::Message>,int> MessageNDepth;
      typedef std::map<void*,MessageNDepth> Data2Message;

Sebastien Petitdemange's avatar
Sebastien Petitdemange committed
73
74
75
      static void* _runFunc(void*);
      void _run();
      void _send_synchro();
76

77
78
      void _checkCompression(const StreamInfo& info,
			     Camera::CompressionType& comp_type);
79

Sebastien Petitdemange's avatar
Sebastien Petitdemange committed
80
      Camera&		m_cam;
81
      char		m_endianess;
Sebastien Petitdemange's avatar
Sebastien Petitdemange committed
82
83
84
85
86
87
88
89
90
91
92
93
      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];
94
      Data2Message	m_data_2_msg;
95
      StreamInfo	m_last_info;
Sebastien Petitdemange's avatar
Sebastien Petitdemange committed
96
97
98
99
100
      _BufferCtrlObj*	m_buffer_ctrl_obj;
    };
  }
}
#endif	// EIGERSTREAM_H