QXmpp Version:0.3.91
|
00001 /* 00002 * Copyright (C) 2008-2011 The QXmpp developers 00003 * 00004 * Author: 00005 * Jeremy LainĂ© 00006 * 00007 * Source: 00008 * http://code.google.com/p/qxmpp 00009 * 00010 * This file is a part of QXmpp library. 00011 * 00012 * This library is free software; you can redistribute it and/or 00013 * modify it under the terms of the GNU Lesser General Public 00014 * License as published by the Free Software Foundation; either 00015 * version 2.1 of the License, or (at your option) any later version. 00016 * 00017 * This library is distributed in the hope that it will be useful, 00018 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00019 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00020 * Lesser General Public License for more details. 00021 * 00022 */ 00023 00024 #ifndef QXMPPCODEC_H 00025 #define QXMPPCODEC_H 00026 00027 #include <QtGlobal> 00028 00029 class QXmppRtpPacket; 00030 class QXmppVideoFormat; 00031 class QXmppVideoFrame; 00032 00037 00038 class QXmppCodec 00039 { 00040 public: 00043 virtual qint64 encode(QDataStream &input, QDataStream &output) = 0; 00044 00047 virtual qint64 decode(QDataStream &input, QDataStream &output) = 0; 00048 }; 00049 00053 00054 class QXmppG711aCodec : public QXmppCodec 00055 { 00056 public: 00057 QXmppG711aCodec(int clockrate); 00058 00059 qint64 encode(QDataStream &input, QDataStream &output); 00060 qint64 decode(QDataStream &input, QDataStream &output); 00061 00062 private: 00063 int m_frequency; 00064 }; 00065 00069 00070 class QXmppG711uCodec : public QXmppCodec 00071 { 00072 public: 00073 QXmppG711uCodec(int clockrate); 00074 00075 qint64 encode(QDataStream &input, QDataStream &output); 00076 qint64 decode(QDataStream &input, QDataStream &output); 00077 00078 private: 00079 int m_frequency; 00080 }; 00081 00082 #ifdef QXMPP_USE_SPEEX 00083 typedef struct SpeexBits SpeexBits; 00084 00088 00089 class QXmppSpeexCodec : public QXmppCodec 00090 { 00091 public: 00092 QXmppSpeexCodec(int clockrate); 00093 ~QXmppSpeexCodec(); 00094 00095 qint64 encode(QDataStream &input, QDataStream &output); 00096 qint64 decode(QDataStream &input, QDataStream &output); 00097 00098 private: 00099 SpeexBits *encoder_bits; 00100 void *encoder_state; 00101 SpeexBits *decoder_bits; 00102 void *decoder_state; 00103 int frame_samples; 00104 }; 00105 #endif 00106 00109 00110 class QXmppVideoDecoder 00111 { 00112 public: 00113 virtual QXmppVideoFormat format() const = 0; 00114 virtual QList<QXmppVideoFrame> handlePacket(const QXmppRtpPacket &packet) = 0; 00115 virtual bool setParameters(const QMap<QString, QString> ¶meters) = 0; 00116 }; 00117 00118 class QXmppVideoEncoder 00119 { 00120 public: 00121 virtual bool setFormat(const QXmppVideoFormat &format) = 0; 00122 virtual QList<QByteArray> handleFrame(const QXmppVideoFrame &frame) = 0; 00123 virtual QMap<QString, QString> parameters() const = 0; 00124 }; 00125 00126 #ifdef QXMPP_USE_THEORA 00127 class QXmppTheoraDecoderPrivate; 00128 class QXmppTheoraEncoderPrivate; 00129 00130 class QXmppTheoraDecoder : public QXmppVideoDecoder 00131 { 00132 public: 00133 QXmppTheoraDecoder(); 00134 ~QXmppTheoraDecoder(); 00135 00136 QXmppVideoFormat format() const; 00137 QList<QXmppVideoFrame> handlePacket(const QXmppRtpPacket &packet); 00138 bool setParameters(const QMap<QString, QString> ¶meters); 00139 00140 private: 00141 QXmppTheoraDecoderPrivate *d; 00142 }; 00143 00144 class QXmppTheoraEncoder : public QXmppVideoEncoder 00145 { 00146 public: 00147 QXmppTheoraEncoder(); 00148 ~QXmppTheoraEncoder(); 00149 00150 bool setFormat(const QXmppVideoFormat &format); 00151 QList<QByteArray> handleFrame(const QXmppVideoFrame &frame); 00152 QMap<QString, QString> parameters() const; 00153 00154 private: 00155 QXmppTheoraEncoderPrivate *d; 00156 }; 00157 #endif 00158 00159 #ifdef QXMPP_USE_VPX 00160 class QXmppVpxDecoderPrivate; 00161 class QXmppVpxEncoderPrivate; 00162 00163 class QXmppVpxDecoder : public QXmppVideoDecoder 00164 { 00165 public: 00166 QXmppVpxDecoder(); 00167 ~QXmppVpxDecoder(); 00168 00169 QXmppVideoFormat format() const; 00170 QList<QXmppVideoFrame> handlePacket(const QXmppRtpPacket &packet); 00171 bool setParameters(const QMap<QString, QString> ¶meters); 00172 00173 private: 00174 QXmppVpxDecoderPrivate *d; 00175 }; 00176 00177 class QXmppVpxEncoder : public QXmppVideoEncoder 00178 { 00179 public: 00180 QXmppVpxEncoder(); 00181 ~QXmppVpxEncoder(); 00182 00183 bool setFormat(const QXmppVideoFormat &format); 00184 QList<QByteArray> handleFrame(const QXmppVideoFrame &frame); 00185 QMap<QString, QString> parameters() const; 00186 00187 private: 00188 QXmppVpxEncoderPrivate *d; 00189 }; 00190 #endif 00191 00192 #endif