diff options
author | zwer <zwer@1f4bef6d-8e0a-0410-8695-e467da8aaccf> | 2006-01-24 12:54:00 +0000 |
---|---|---|
committer | zwer <zwer@1f4bef6d-8e0a-0410-8695-e467da8aaccf> | 2006-01-24 12:54:00 +0000 |
commit | b998c31e7e0f4f84b2f64c50093069c815772808 (patch) | |
tree | 7b65667843ea5db07766d23688f045d20140361c /vncEncoder.h | |
download | vdr-plugin-ffnetdev-b998c31e7e0f4f84b2f64c50093069c815772808.tar.gz vdr-plugin-ffnetdev-b998c31e7e0f4f84b2f64c50093069c815772808.tar.bz2 |
FFNetDev-Plugin
git-svn-id: svn://svn.berlios.de/ffnetdev/trunk@1 1f4bef6d-8e0a-0410-8695-e467da8aaccf
Diffstat (limited to 'vncEncoder.h')
-rw-r--r-- | vncEncoder.h | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/vncEncoder.h b/vncEncoder.h new file mode 100644 index 0000000..561d8ad --- /dev/null +++ b/vncEncoder.h @@ -0,0 +1,141 @@ +// Copyright (C) 2001 Constantin Kaplinsky. All Rights Reserved. +// Copyright (C) 2000 Tridia Corporation. All Rights Reserved. +// Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved. +// +// This file is part of the VNC system. +// +// The VNC system 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. +// +// TightVNC distribution homepage on the Web: http://www.tightvnc.com/ +// +// If the source code for the VNC system is not available from the place +// whence you received this file, check http://www.uk.research.att.com/vnc or contact +// the authors on vnc@uk.research.att.com for information on obtaining it. + + +// vncEncoder object + +// The vncEncoder object encodes regions of a display buffer for sending +// to a client + +class vncEncoder; + +#if !defined(RFBENCODER_DEFINED) +#define RFBENCODER_DEFINED +#pragma once + + +typedef unsigned char BYTE; +typedef unsigned int UINT; +typedef unsigned long DWORD; + +//static + +#include "translate.h" + +typedef struct { + int left; + int top; + int right; + int bottom; +} RECT; + +// Class definition + +class vncEncoder +{ +// Fields +public: + +// Methods +public: + // Create/Destroy methods + vncEncoder(); + virtual ~vncEncoder(); + + // Initialisation + virtual void Init(); + + // A method to return the encoding name, used by the LogStats() method + virtual const char* GetEncodingName() { return "Raw"; } + + // Central method for outputing encoding statistics + virtual void LogStats(); + + // Encoder stats used by the buffer object + virtual UINT RequiredBuffSize(UINT width, UINT height); + virtual UINT NumCodedRects(RECT &rect); + + // Translation & encoding routines + // - Source is the base address of the ENTIRE SCREEN buffer. + // The Translate routine compensates automatically for the desired rectangle. + // - Dest is the base address to encode the rect to. The rect will be encoded + // into a contiguous region of the buffer. + virtual void Translate(BYTE *source, BYTE *dest, const RECT &rect); + virtual UINT EncodeRect(BYTE *source, BYTE *dest, const RECT &rect); +// virtual UINT EncodeRect(BYTE *source, VSocket *outConn, BYTE *dest, const RECT &rect); + + // Additional translation function for cursor shape data (overloaded!) + void Translate(BYTE *source, BYTE *dest, int w, int h, int bytesPerRow); + + // Translation handling + bool SetLocalFormat(rfbPixelFormat &pixformat, int width, int height); + bool SetRemoteFormat(rfbPixelFormat &pixformat); + + // Configuring encoder + void SetCompressLevel(int level); + void SetQualityLevel(int level); + void EnableXCursor(bool enable) { m_use_xcursor = enable; } + void EnableRichCursor(bool enable) { m_use_richcursor = enable; } + void EnableLastRect(bool enable) { m_use_lastrect = enable; } + + // Colour map handling +// BOOL GetRemotePalette(RGBQUAD *quadlist, UINT ncolours); + + // Supporting cursor shape updates +// BOOL SendEmptyCursorShape(VSocket *outConn); +// BOOL SendCursorShape(VSocket *outConn, vncDesktop *desktop); + +protected: + bool SetTranslateFunction(); + + // Supporting cursor shape updates +// BOOL SendXCursorShape(VSocket *outConn, BYTE *mask, int xhot,int yhot,int width,int height); +// BOOL SendRichCursorShape(VSocket *outConn, BYTE *mbits, BYTE *cbits, int xhot,int yhot,int width,int height); + void FixCursorMask(BYTE *mbits, BYTE *cbits, int width, int height, int width_bytes); + +// Implementation +protected: + rfbTranslateFnType m_transfunc; // Translator function + char* m_transtable; // Colour translation LUT + char* m_localpalette; // Palette info if client is palette-based + rfbPixelFormat m_localformat; // Pixel Format info + rfbPixelFormat m_remoteformat; // Client pixel format info + rfbPixelFormat m_transformat; // Internal format used for translation (usually == client format) + int m_bytesPerRow; // Number of bytes per row locally + int dataSize; // Total size of raw data encoded + int rectangleOverhead; // Total size of rectangle header data + int encodedSize; // Total size of encoded data + int transmittedSize; // Total amount of data sent + + int m_compresslevel; // Encoding-specific compression level (if needed). + int m_qualitylevel; // Image quality level for lossy JPEG compression. + bool m_use_xcursor; // XCursor cursor shape updates allowed. + bool m_use_richcursor; // RichCursor cursor shape updates allowed. + bool m_use_lastrect; // LastRect pseudo-encoding allowed. +}; + +#endif // vncENCODER_DEFINED |