root/trunk/libffado/src/libstreaming/amdtp/AmdtpReceiveStreamProcessor.h

Revision 864, 3.7 kB (checked in by ppalmers, 14 years ago)

update license to GPLv2 or GPLv3 instead of GPLv2 or any later version. Update copyrights to reflect the new year

Line 
1 /*
2  * Copyright (C) 2005-2008 by Pieter Palmers
3  *
4  * This file is part of FFADO
5  * FFADO = Free Firewire (pro-)audio drivers for linux
6  *
7  * FFADO is based upon FreeBoB.
8  *
9  * This program is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation, either version 2 of the License, or
12  * (at your option) version 3 of the License.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
21  *
22  */
23
24 #ifndef __FFADO_AMDTPRECEIVESTREAMPROCESSOR__
25 #define __FFADO_AMDTPRECEIVESTREAMPROCESSOR__
26
27 /**
28  * This class implements IEC61883-6 / AM824 / AMDTP based streaming
29  */
30
31 #include "debugmodule/debugmodule.h"
32
33 #include "../generic/StreamProcessor.h"
34 #include "../util/cip.h"
35
36 #include <libiec61883/iec61883.h>
37 #include <pthread.h>
38
39 #define AMDTP_MAX_PACKET_SIZE 2048
40
41 #define IEC61883_STREAM_TYPE_MIDI   0x0D
42 #define IEC61883_STREAM_TYPE_SPDIF  0x00
43 #define IEC61883_STREAM_TYPE_MBLA   0x06
44
45 #define IEC61883_AM824_LABEL_MASK             0xFF000000
46 #define IEC61883_AM824_GET_LABEL(x)         (((x) & 0xFF000000) >> 24)
47 #define IEC61883_AM824_SET_LABEL(x,y)         ((x) | ((y)<<24))
48
49 #define IEC61883_AM824_LABEL_MIDI_NO_DATA     0x80
50 #define IEC61883_AM824_LABEL_MIDI_1X          0x81
51 #define IEC61883_AM824_LABEL_MIDI_2X          0x82
52 #define IEC61883_AM824_LABEL_MIDI_3X          0x83
53
54 namespace Streaming {
55
56 class Port;
57 class AmdtpAudioPort;
58 class AmdtpMidiPort;
59 /*!
60 \brief The Base Class for an AMDTP receive stream processor
61
62  This class implements a ReceiveStreamProcessor that demultiplexes
63  AMDTP streams into Ports.
64
65 */
66 class AmdtpReceiveStreamProcessor
67     : public StreamProcessor
68 {
69
70 public:
71     /**
72      * Create a AMDTP receive StreamProcessor
73      * @param port 1394 port
74      * @param dimension number of substreams in the ISO stream
75      *                  (midi-muxed is only one stream)
76      */
77     AmdtpReceiveStreamProcessor(FFADODevice &parent, int dimension);
78     virtual ~AmdtpReceiveStreamProcessor() {};
79
80     enum eChildReturnValue processPacketHeader(unsigned char *data, unsigned int length,
81                   unsigned char channel, unsigned char tag, unsigned char sy,
82                   unsigned int cycle, unsigned int dropped);
83     enum eChildReturnValue processPacketData(unsigned char *data, unsigned int length,
84                   unsigned char channel, unsigned char tag, unsigned char sy,
85                   unsigned int cycle, unsigned int dropped);
86
87     virtual bool prepareChild();
88
89 public:
90     virtual unsigned int getEventSize()
91                     {return 4;};
92     virtual unsigned int getMaxPacketSize()
93                     {return 4 * (2 + getSytInterval() * m_dimension);};
94     virtual unsigned int getEventsPerFrame()
95                     { return m_dimension; };
96     virtual unsigned int getNominalFramesPerPacket()
97                     {return getSytInterval();};
98
99 protected:
100     bool processReadBlock(char *data, unsigned int nevents, unsigned int offset);
101
102 private:
103     int decodeMBLAEventsToPort(AmdtpAudioPort *, quadlet_t *data, unsigned int offset, unsigned int nevents);
104     int decodeMidiEventsToPort(AmdtpMidiPort *p, quadlet_t *data, unsigned int offset, unsigned int nevents);
105
106     unsigned int getSytInterval();
107
108     int m_dimension;
109     unsigned int m_syt_interval;
110 };
111
112
113 } // end of namespace Streaming
114
115 #endif /* __FFADO_AMDTPRECEIVESTREAMPROCESSOR__ */
116
Note: See TracBrowser for help on using the browser.