Parent: [c2b48d] (diff)

Download this file

avtransport.hxx    160 lines (132 with data), 5.0 kB

  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
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/* Copyright (C) 2006-2016 J.F.Dockes
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#ifndef _AVTRANSPORT_HXX_INCLUDED_
#define _AVTRANSPORT_HXX_INCLUDED_
#include "libupnpp/config.h"
#include <string>
#include "libupnpp/control/cdircontent.hxx" // for UPnPDirObject
#include "libupnpp/control/service.hxx" // for Service
#include "libupnpp/log.hxx"
namespace UPnPClient {
class AVTransport;
class UPnPDeviceDesc;
class UPnPServiceDesc;
typedef std::shared_ptr<AVTransport> AVTH;
/**
* AVTransport Service client class.
*
*/
class AVTransport : public Service {
public:
/** Construct by copying data from device and service objects. */
AVTransport(const UPnPDeviceDesc& dev, const UPnPServiceDesc& srv)
: Service(dev, srv) {
}
AVTransport() {}
virtual ~AVTransport() {}
int setAVTransportURI(const std::string& uri, const std::string& metadata,
int instanceID=0)
{
return setURI(uri, metadata, instanceID, false);
}
int setNextAVTransportURI(const std::string& uri, const std::string& md,
int instanceID=0)
{
return setURI(uri, md, instanceID, true);
}
enum PlayMode {PM_Unknown, PM_Normal, PM_Shuffle, PM_RepeatOne,
PM_RepeatAll, PM_Random, PM_Direct1
};
int setPlayMode(PlayMode pm, int instanceID=0);
struct MediaInfo {
int nrtracks;
int mduration; // seconds
std::string cururi;
UPnPDirObject curmeta;
std::string nexturi;
UPnPDirObject nextmeta;
std::string pbstoragemed;
std::string rcstoragemed;
std::string ws;
};
int getMediaInfo(MediaInfo& info, int instanceID=0);
enum TransportState {Unknown, Stopped, Playing, Transitioning,
PausedPlayback, PausedRecording, Recording,
NoMediaPresent
};
enum TransportStatus {TPS_Unknown, TPS_Ok, TPS_Error};
struct TransportInfo {
TransportState tpstate;
TransportStatus tpstatus;
int curspeed;
};
int getTransportInfo(TransportInfo& info, int instanceID=0);
struct PositionInfo {
int track;
int trackduration; // secs
UPnPDirObject trackmeta;
std::string trackuri;
int reltime;
int abstime;
int relcount;
int abscount;
};
int getPositionInfo(PositionInfo& info, int instanceID=0);
struct DeviceCapabilities {
std::string playmedia;
std::string recmedia;
std::string recqualitymodes;
};
int getDeviceCapabilities(DeviceCapabilities& info, int instanceID=0);
struct TransportSettings {
PlayMode playmode;
std::string recqualitymode;
};
int getTransportSettings(TransportSettings& info, int instanceID=0);
int stop(int instanceID=0);
int pause(int instanceID=0);
int play(int speed = 1, int instanceID = 0);
enum SeekMode {SEEK_TRACK_NR, SEEK_ABS_TIME, SEEK_REL_TIME, SEEK_ABS_COUNT,
SEEK_REL_COUNT, SEEK_CHANNEL_FREQ, SEEK_TAPE_INDEX,
SEEK_FRAME
};
// Target in seconds for times.
int seek(SeekMode mode, int target, int instanceID=0);
// These are for multitrack medium like a CD. No meaning for electronic
// tracks where set(next)AVTransportURI() is used
int next(int instanceID=0);
int previous(int instanceID=0);
enum TransportActions {TPA_Next = 1, TPA_Pause = 2, TPA_Play = 4,
TPA_Previous = 8, TPA_Seek = 16, TPA_Stop = 32
};
int getCurrentTransportActions(int& actions, int instanceID=0);
/** Test service type from discovery message */
static bool isAVTService(const std::string& st);
virtual bool serviceTypeMatch(const std::string& tp);
protected:
/* My service type string */
static const std::string SType;
int setURI(const std::string& uri, const std::string& metadata,
int instanceID, bool next);
int CTAStringToBits(const std::string& actions, int& iacts);
private:
void evtCallback(const std::unordered_map<std::string, std::string>&);
void registerCallback();
};
} // namespace UPnPClient
#endif /* _AVTRANSPORT_HXX_INCLUDED_ */