ctngen.h
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 10k
Category:

Windows Kernel

Development Platform:

Visual C++

  1. /******************************Module*Header*******************************
  2. * Module Name: ctngen.h
  3. *
  4. * Implementation of the IFileChangeNotify and IThumbnailGenerator interfaces
  5. *
  6. * Created: 14-Nov-1997
  7. * Author: Ori Gershony [orig]
  8. *
  9. * Copyright (c) 1996 Microsoft Corporation
  10. **************************************************************************/
  11. #ifndef _CTNGEN_H_
  12. #define _CTNGEN_H_
  13. #include <objidl.h>
  14. #include "..resource.h"
  15. #include <atlbase.h>
  16. //You may derive a class from CComModule and use it if you want to override
  17. //something, but do not change the name of _Module
  18. extern CComModule _Module;
  19. #include <atlcom.h>
  20. #include "ddraw.h"
  21. #include "ImgUtil.H"
  22. #include "ocmm.h"
  23. #include "decoder.h"
  24. // Jpeg buffer large enough to fit string and compressed JPEG stream.  To be
  25. // conservative, this should be at least as large as width*height*4 of the
  26. // thumbnail (4 because we store it as 32BPP).
  27. #define JPEG_BUFFER_SIZE 60000
  28. #define MIN_JPEG_SIZE    32768
  29. #define MAX_IMAGE_SIZE   4*1024*1024 // Don't decode images that take more storage than
  30.                                      // a 1024 by 1024 32BPP DIB in the content indexer
  31.                                      // codepath
  32. extern CRITICAL_SECTION g_csTNGEN;
  33. //
  34. // This is defined in uuid.lib
  35. //
  36. EXTERN_C const GUID CLSID_ThumbnailFCNHandler;
  37. //
  38. // The CThumbnailFCNContainer class implements the IThumbnailExtractor interface
  39. //
  40. class CThumbnailFCNContainer : public IThumbnailExtractor,
  41.                                public IImageDecodeEventSink,
  42.                                public CComObjectRoot,
  43.                                public CComCoClass <CThumbnailFCNContainer,&CLSID_ThumbnailFCNHandler>
  44. {
  45.     public:
  46.         CThumbnailFCNContainer(VOID);
  47.         ~CThumbnailFCNContainer(VOID);
  48.         BEGIN_COM_MAP( CThumbnailFCNContainer )
  49.             COM_INTERFACE_ENTRY( IThumbnailExtractor )
  50.             COM_INTERFACE_ENTRY( IImageDecodeEventSink )
  51.         END_COM_MAP( )
  52.         DECLARE_REGISTRY( CThumbnailFCNContainer,
  53.                           _T("tngen.1"),
  54.                           _T("tngen"),
  55.                           IDS_THUMBNAILGEN_DESC,
  56.                           THREADFLAGS_BOTH);
  57.         DECLARE_NOT_AGGREGATABLE( CThumbnailFCNContainer );
  58.         // IThumbnailExtractor members
  59.         STDMETHODIMP        OnFileUpdated (IStorage *pStg);
  60.         STDMETHODIMP        ExtractThumbnail(
  61.                                 IStorage *pStg,
  62.                                 ULONG ulLength,
  63.                                 ULONG ulHeight,
  64.                                 ULONG *pulOutputLength,
  65.                                 ULONG *pulOutputHeight,
  66.                                 HBITMAP *phOutputBitmap
  67.                                 );
  68.         // Other public members (to be used by the shell)
  69.         STDMETHODIMP        EncodeThumbnail(
  70.                                 VOID *pInputBitmapBits,
  71.                                 ULONG ulWidth,
  72.                                 ULONG ulHeight,
  73.                                 VOID **ppJPEGBuffer,
  74.                                 ULONG *pulBufferSize
  75.                                 );
  76.         STDMETHODIMP        DecodeThumbnail(
  77.                                 HBITMAP *phBitmap,
  78.                                 ULONG *pulWidth,
  79.                                 ULONG *pulHeight,
  80.                                 VOID *pJPEGBuffer,
  81.                                 ULONG ulBufferSize
  82.                                 );
  83.         STDMETHODIMP        WriteThumbnail(
  84.                                 VOID *pBuffer,
  85.                                 ULONG ulBufferSize,
  86.                                 IPropertySetStorage *pPropSetStg,
  87.                                 BOOLEAN bAlwaysWrite
  88.                                 );
  89.         STDMETHODIMP        ReadThumbnail(
  90.                                 VOID **ppBuffer,
  91.                                 ULONG *pulBufferSize,
  92.                                 IPropertySetStorage *pPropSetStg
  93.                                 );
  94.         STDMETHODIMP        GetTimeStamp(
  95.                                 IPropertySetStorage *pPropSetStg,
  96.                                 FILETIME *pFiletime
  97.                                 );
  98.     private:
  99.         // private members
  100.         STDMETHODIMP        ExtractThumbnailHelper(
  101.                                 IStorage *pStg,
  102.                                 ULONG ulLength,
  103.                                 ULONG ulHeight,
  104.                                 ULONG *pulOutputLength,
  105.                                 ULONG *pulOutputHeight,
  106.                                 HBITMAP *phOutputBitmap
  107.                                 );
  108.         STDMETHODIMP        CThumbnailFCNContainer::SuppressTimestampChanges(
  109.                                 IUnknown *punkStorage
  110.                                 );
  111.         // TN_ members
  112.         STDMETHODIMP        CThumbnailFCNContainer::TN_Initialize(
  113.                                 VOID
  114.                                 );
  115.         STDMETHODIMP        CThumbnailFCNContainer::TN_Uninitialize(
  116.                                 VOID
  117.                                 );
  118.         STDMETHODIMP        CThumbnailFCNContainer::deliverDecompressedImage(
  119.                                 HBITMAP hbp,
  120.                                 ULONG x,
  121.                                 ULONG y
  122.                                 );
  123.         STDMETHODIMP        CThumbnailFCNContainer::createThumbnailFromImage(
  124.                                 HBITMAP *phbp,
  125.                                 ULONG *px,
  126.                                 ULONG *py,
  127.                                 INT **ppvbits
  128.                                 );
  129.         STDMETHODIMP        CThumbnailFCNContainer::createCompressedThumbnail(
  130.                                 HBITMAP hbp,
  131.                                 ULONG x,
  132.                                 ULONG y,
  133.                                 CHAR *pJPEGBuf,
  134.                                 ULONG *pulJPEGBufSize,
  135.                                 FILETIME mtime
  136.                                 );
  137.         STDMETHODIMP        CThumbnailFCNContainer::makeSquareThumbnail(
  138.                                 ULONG *pulOutputLength,
  139.                                 ULONG *pulOutputWidth,
  140.                                 HBITMAP *phOutputBitmap
  141.                                 );
  142.         STDMETHODIMP        CThumbnailFCNContainer::TN_GenerateCompressedThumbnail(
  143.                                 IStream *pInputStream,
  144.                                 CHAR *pJPEGBuf,
  145.                                 ULONG *pulJPEGBufSize,
  146.                                 FILETIME mtime
  147.                                 );
  148.         STDMETHODIMP        CThumbnailFCNContainer::TN_GenerateThumbnailBitmap(
  149.                                 IStream *pInputStream,
  150.                                 ULONG   ulLength,
  151.                                 ULONG   ulWidth,
  152.                                 PULONG  pulOutputLength,
  153.                                 PULONG  pulOutputWidth,
  154.                                 HBITMAP *phOutputBitmap
  155.                                 );
  156.         STDMETHODIMP        CThumbnailFCNContainer::TN_GenerateThumbnailImage(
  157.                                 PCHAR   prgbJPEGBuf,
  158.                                 ULONG   ulLength,
  159.                                 ULONG   ulWidth,
  160.                                 PULONG  pulOutputLength,
  161.                                 PULONG  pulOutputWidth,
  162.                                 HBITMAP *phOutputBitmap
  163.                                 );
  164.         // TN_ variables:
  165.         //
  166.         // The following globals should get their values from the registry
  167.         // during TN_Initialize
  168.         //
  169.         // WARNING:  for large Thumbnail_X and Thumbnail_Y values, we will also
  170.         // need to increase INPUT_vBUF_SIZE and OUTPUT_BUF_SIZE in jdatasrc.cpp and
  171.         // jdatadst.cpp (lovely jpeg decompression code...).  Also need to modify our
  172.         // own JPEG_BUFFER_SIZE in ctngen.cxx.
  173.         //
  174.         ULONG Thumbnail_Quality;
  175.         ULONG Thumbnail_X;
  176.         ULONG Thumbnail_Y;
  177.         //
  178.         // JPEG globals
  179.         //
  180.         HANDLE m_hJpegC, m_hJpegD;
  181.         BYTE * m_JPEGheader;
  182.         ULONG  m_JPEGheaderSize;
  183.         struct {
  184.             HBITMAP hbp;
  185.             ULONG x;
  186.             ULONG y;
  187.         } m_imageData;
  188.         // IImageDecodeEventSink members:
  189.         STDMETHODIMP        CThumbnailFCNContainer::GetSurface(
  190.                                 LONG nWidth,
  191.                                 LONG nHeight,
  192.                                 REFGUID bfid,
  193.                                 ULONG nPasses,
  194.                                 DWORD dwHints,
  195.                                 IUnknown** ppSurface
  196.                                 );
  197.         STDMETHODIMP        CThumbnailFCNContainer::OnBeginDecode(
  198.                                 DWORD* pdwEvents,
  199.                                 ULONG* pnFormats,
  200.                                 GUID** ppFormats
  201.                                 );
  202.         STDMETHODIMP        CThumbnailFCNContainer::OnBitsComplete(
  203.                                 VOID
  204.                                 );
  205.         STDMETHODIMP        CThumbnailFCNContainer::OnDecodeComplete(
  206.                                 HRESULT hrStatus
  207.                                 );
  208.         STDMETHODIMP        CThumbnailFCNContainer::OnPalette(
  209.                                 VOID
  210.                                 );
  211.         STDMETHODIMP        CThumbnailFCNContainer::OnProgress(
  212.                                 RECT* pBounds,
  213.                                 BOOL bFinal
  214.                                 );
  215.         // Decoder variables:
  216.         FILTERINFO m_Filter;
  217.         CComPtr< IDirectDrawSurface > m_pDDrawSurface;
  218.         RECT m_rcProg;
  219.         DWORD m_dwLastTick;
  220.         // Other decoder privates
  221.         STDMETHODIMP        CThumbnailFCNContainer::InitializeEventSink(
  222.                                 VOID
  223.                                 );
  224. };
  225. typedef CThumbnailFCNContainer *PCThumbnailFCNContainer;
  226. //
  227. // Decoder publics
  228. //
  229. HRESULT decoderInitialize(VOID);
  230. VOID decoderUninitialize(VOID);
  231. #endif