Parent: [64cbf0] (diff)

Child: [08fe11] (diff)

Download this file

avtransport.hxx    161 lines (131 with data), 5.1 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
160
/* Copyright (C) 2014 J.F.Dockes
* This program 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 2 of the License, or
* (at your option) any later version.
*
* This program 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, write to the
* Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef _AVTRANSPORT_HXX_INCLUDED_
#define _AVTRANSPORT_HXX_INCLUDED_
#include "libupnpp/config.h"
#include <string> // for string
#include "libupnpp/control/cdircontent.hxx" // for UPnPDirObject
#include "libupnpp/control/service.hxx" // for Service
namespace UPnPClient { class AVTransport; }
namespace UPnPClient { class UPnPDeviceDesc; }
namespace UPnPClient { class UPnPServiceDesc; }
namespace UPnPClient {
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& device,
const UPnPServiceDesc& service)
: Service(device, service) {
registerCallback();
}
virtual ~AVTransport() {
unregisterCallback();
}
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);
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_ */