class ImageConverterIPP : public ImageConverter //Q_AV_EXPORT is not needed { DPTR_DECLARE_PRIVATE(ImageConverterIPP) public: ImageConverterIPP(); virtual bool convert(const quint8 *const srcSlice[], const int srcStride[]); protected: virtual bool prepareData(); //Allocate memory for out data }; ImageConverterId ImageConverterId_IPP = 2; FACTORY_REGISTER_ID_AUTO(ImageConverter, IPP, "IPP") void RegisterImageConverterIPP_Man() { FACTORY_REGISTER_ID_MAN(ImageConverter, IPP, "IPP") } class ImageConverterIPPPrivate : public ImageConverterPrivate { public: ImageConverterIPPPrivate():need_scale(true) {} bool need_scale; QByteArray orig_ori_rgb; }; ImageConverterIPP::ImageConverterIPP() :ImageConverter(*new ImageConverterIPPPrivate()) { }
public: AudioOutputPortAudio(); ~AudioOutputPortAudio(); bool open(); bool close(); virtual void waitForNextBuffer(); protected: bool write(); }; extern AudioOutputId AudioOutputId_PortAudio; FACTORY_REGISTER_ID_AUTO(AudioOutput, PortAudio, "PortAudio") void RegisterAudioOutputPortAudio_Man() { FACTORY_REGISTER_ID_MAN(AudioOutput, PortAudio, "PortAudio") } class AudioOutputPortAudioPrivate : public AudioOutputPrivate { public: AudioOutputPortAudioPrivate(): initialized(false) ,outputParameters(new PaStreamParameters) ,stream(0) { PaError err = paNoError; if ((err = Pa_Initialize()) != paNoError) { qWarning("Error when init portaudio: %s", Pa_GetErrorText(err)); available = false; return;
DPTR_DECLARE_PRIVATE(ImageConverterFF) public: ImageConverterFF(); virtual bool check() const; virtual bool convert(const quint8 *const srcSlice[], const int srcStride[]); protected: virtual bool setupColorspaceDetails(); }; ImageConverterId ImageConverterId_FF = 1; FACTORY_REGISTER_ID_AUTO(ImageConverter, FF, "FFmpeg") void RegisterImageConverterFF_Man() { FACTORY_REGISTER_ID_MAN(ImageConverter, FF, "FFmpeg") } class ImageConverterFFPrivate : public ImageConverterPrivate { public: ImageConverterFFPrivate() : sws_ctx(0) , update_eq(true) {} ~ImageConverterFFPrivate() { if (sws_ctx) { sws_freeContext(sws_ctx); sws_ctx = 0; } }
virtual bool open(); virtual bool close(); virtual BufferControl supportedBufferControl() const; virtual bool play(); protected: virtual bool write(const QByteArray& data); //default return -1. means not the control virtual int getPlayedCount(); }; extern AudioOutputId AudioOutputId_OpenSL; FACTORY_REGISTER_ID_AUTO(AudioOutput, OpenSL, "OpenSL") void RegisterAudioOutputOpenSL_Man() { FACTORY_REGISTER_ID_MAN(AudioOutput, OpenSL, "OpenSL") } #define SL_RUN_CHECK_RETURN(FUNC, RET) \ do { \ SLresult ret = FUNC; \ if (ret != SL_RESULT_SUCCESS) { \ qWarning("AudioOutputOpenSL Error>>> " #FUNC " (%lu)", ret); \ return RET; \ } \ } while(0) #define SL_RUN_CHECK(FUNC) SL_RUN_CHECK_RETURN(FUNC,) #define SL_RUN_CHECK_FALSE(FUNC) SL_RUN_CHECK_RETURN(FUNC, false) static SLDataFormat_PCM audioFormatToSL(const AudioFormat &format) {
//draw the current frame using the current paint engine. called by paintEvent() virtual void drawFrame(); /*usually you don't need to reimplement paintEvent, just drawXXX() is ok. unless you want do all *things yourself totally*/ virtual void paintEvent(QPaintEvent *); virtual void resizeEvent(QResizeEvent *); //stay on top will change parent, hide then show(windows). we need GetDC() again virtual void showEvent(QShowEvent *); }; typedef Direct2DRenderer VideoRendererDirect2D; extern VideoRendererId VideoRendererId_Direct2D; FACTORY_REGISTER_ID_AUTO(VideoRenderer, Direct2D, "Direct2D") void RegisterVideoRendererDirect2D_Man() { FACTORY_REGISTER_ID_MAN(VideoRenderer, Direct2D, "Direct2D") } VideoRendererId Direct2DRenderer::id() const { return VideoRendererId_Direct2D; } class Direct2DRendererPrivate : public VideoRendererPrivate { public: DPTR_DECLARE_PUBLIC(Direct2DRenderer) Direct2DRendererPrivate(): d2d_factory(0) , render_target(0) , bitmap(0)
virtual bool open(); virtual bool close(); virtual bool isSupported(AudioFormat::SampleFormat sampleFormat) const; virtual BufferControl supportedBufferControl() const; virtual bool play(); protected: virtual bool write(const QByteArray& data); virtual int getOffsetByBytes(); }; extern AudioOutputId AudioOutputId_DSound; FACTORY_REGISTER_ID_AUTO(AudioOutput, DSound, "DirectSound") void RegisterAudioOutputDSound_Man() { FACTORY_REGISTER_ID_MAN(AudioOutput, DSound, "DirectSound") } template <class T> void SafeRelease(T **ppT) { if (*ppT) { (*ppT)->Release(); *ppT = NULL; } } // use the definitions from the win32 api headers when they define these #define WAVE_FORMAT_IEEE_FLOAT 0x0003 #define WAVE_FORMAT_DOLBY_AC3_SPDIF 0x0092 #define WAVE_FORMAT_EXTENSIBLE 0xFFFE /* GUID SubFormat IDs */