1 /* 2 ******************************************************************************* 3 * 4 * File: PCLmGenerator.h 5 * Author: Steve Claiborne 6 * Purpose: Class/Object interface to genPCLm 7 * Status: 8 * 9 * (C) Copyright 2010, HP Company, all rights reserved. 10 * 11 ******************************************************************************* 12 */ 13 #ifndef _PCLM_GENERATOR 14 #define _PCLM_GENERATOR 15 #define SUPPORT_WHITE_STRIPS 16 17 #include "common_defines.h" 18 19 const int OUT_STR_SIZE = 256; 20 21 typedef enum 22 { 23 simplex, 24 duplex_longEdge, 25 duplex_shortEdge 26 } duplexDispositionEnum; 27 28 typedef enum 29 { 30 job_open, 31 job_closed, 32 job_errored 33 } jobStateEnum; 34 35 typedef enum 36 { 37 deviceRGB, 38 adobeRGB, 39 grayScale, 40 blackonly 41 } colorSpaceDisposition; 42 43 typedef enum 44 { 45 default_colortheme, 46 vividsRGB, 47 photosRGB, 48 photoAdobeRGB, 49 none 50 }colorThemes; 51 52 typedef enum 53 { 54 debugOn, 55 debugOff 56 } debugDisposition; 57 58 typedef enum 59 { 60 compressRLE, 61 compressDCT, 62 compressFlate, 63 compressDefault, 64 compressNone 65 } compressionDisposition; 66 67 typedef enum 68 { 69 portraitOrientation, 70 landscapeOrientation 71 } mediaOrientationDisposition; 72 73 typedef enum 74 { 75 res300, 76 res600, 77 res1200 78 } renderResolution; 79 80 typedef enum 81 { 82 top_left, 83 bottom_right 84 } pageOriginType; 85 86 typedef enum 87 { 88 color_content, 89 gray_content, 90 unknown_content 91 } pageCromaticContent; 92 93 typedef enum 94 { 95 draft, 96 normal, 97 best, 98 } pageOutputQuality; 99 100 typedef enum 101 { 102 alternate = 0, 103 alternate_roll = 1, 104 auto_select = 2, 105 bottom = 3, 106 center = 4 , 107 disc = 5, 108 envelope =6 , 109 hagaki = 7, 110 large_capacity = 8, 111 left = 9, 112 main_tray = 10, 113 main_roll = 11, 114 manual = 12, 115 middle = 13, 116 photo = 14, 117 rear = 15, 118 right = 16, 119 side = 17, 120 top = 18, 121 tray_1 = 19, 122 tray_2 =20, 123 tray_3 = 21, 124 tray_4 =22, 125 tray_5 = 23, 126 tray_N = 24, 127 } jobInputBin; 128 129 typedef enum 130 { 131 top_output, 132 middle_output, 133 bottom_output, 134 side_output, 135 center_output, 136 rear_output, 137 face_up, 138 face_down, 139 large_capacity_output, 140 stacker_N, 141 mailbox_N, 142 tray_1_output, 143 tray_2_output, 144 tray_3_output, 145 tray_4_output, 146 } jobOutputBin; 147 148 typedef struct 149 { 150 char userPageQuality[32]; 151 mediaOrientationDisposition userOrientation; 152 char userMediaType[256]; 153 jobInputBin userInputBin; 154 int userCopies; 155 char userDocumentName[256]; 156 jobOutputBin userOutputBin; 157 colorThemes colorTheme; 158 char datetime[256]; 159 int jobid; 160 char user_name[32]; 161 } PCLmSUserSettingsType; 162 163 typedef struct 164 { 165 char mediaSizeName[256]; 166 //char mediaTypeName[256]; 167 char clientLocale [256]; 168 float mediaHeight; 169 float mediaWidth; 170 float sourceHeight; 171 float sourceWidth; 172 float mediaWidthOffset; 173 float mediaHeightOffset; 174 pageCromaticContent colorContent; // Did the page contain any "real" color 175 pageOriginType pageOrigin; 176 compressionDisposition compTypeRequested; 177 colorSpaceDisposition srcColorSpaceSpefication; 178 colorSpaceDisposition dstColorSpaceSpefication; 179 int stripHeight; 180 renderResolution destinationResolution; 181 182 duplexDispositionEnum duplexDisposition; // SJC 183 int scaleFactor; // sjc 184 bool genExtraPage; // SJC 185 bool mirrorBackside; 186 } PCLmPageSetup; 187 188 typedef struct 189 { 190 PCLmPageSetup *PCLmPageContent; 191 PCLmSUserSettingsType *PCLmSUserSettings; 192 } PCLmSSetup; 193 194 typedef enum 195 { 196 success=0, 197 genericFailure=-1, 198 callAgain=1 199 } PCLmGenerator_returnType; 200 201 class PCLmGenerator 202 { 203 public: 204 205 PCLmGenerator(); 206 ~PCLmGenerator(); 207 208 #ifdef STANDALONE 209 int StartJob (void **pOutBuffer, int *iOutBufferSize, bool debug); 210 #else 211 int StartJob (void **pOutBuffer, int *iOutBufferSize); 212 #endif 213 int EndJob (void **pOutBUffer, int *iOutBifferSize); 214 int StartPage (PCLmPageSetup *PCLmPageContent, void **pOutBuffer, int *iOutBufferSize); 215 int StartPage (PCLmSSetup *PCLmSPageContent, bool generatePCLmS, void **pOutBuffer, int *iOutBufferSize); 216 int EndPage (void **pOutBuffer, int *iOutBufferSize); 217 int Encapsulate (void *pInBuffer, int inBufferSize, int numLines, void **pOutBuffer, int *iOutBufferSize); 218 int SkipLines (int iSkipLines); 219 void FreeBuffer (void *pBuffer); 220 221 private: 222 bool colorConvertSource(colorSpaceDisposition srcCS, colorSpaceDisposition dstCS, ubyte *strip, sint32 stripWidth, sint32 stripHeight); 223 void writePDFGrammarPage(int imageWidth, int imageHeight, int numStrips, colorSpaceDisposition destColorSpace); 224 void writePDFGrammarHeader(); 225 int injectRLEStrip(ubyte *RLEBuffer, int numBytes, int imageWidth, int imageHeight, colorSpaceDisposition destColorSpace, bool); 226 int injectLZStrip(ubyte *LZBuffer, int numBytes, int imageWidth, int imageHeight, colorSpaceDisposition destColorSpace, bool); 227 int injectJPEG(char *jpeg_Buff, int imageWidth, int imageHeight, int numCompBytes, colorSpaceDisposition destColorSpace, bool); 228 void initOutBuff(char *buff, sint32 size); 229 void writeStr2OutBuff(char *str); 230 void write2Buff(ubyte *buff, int buffSize); 231 int statOutputFileSize(); 232 void writePDFGrammarTrailer(int imageWidth, int imageHeight); 233 bool injectAdobeRGBCS(); 234 bool addKids(sint32 kidObj); 235 bool addXRef(sint32 xRefObj); 236 int errorOutAndCleanUp(); 237 void Cleanup(void); /*Called in errorOutAndCleanUp and Destructor*/ 238 void writeJobTicket(void); 239 #ifdef SUPPORT_WHITE_STRIPS 240 bool isWhiteStrip(void *, int); 241 #endif 242 char* getInputBinString(jobInputBin bin); 243 char* getOutputBin(jobOutputBin bin); 244 char* getOrientationString(mediaOrientationDisposition Orientation); 245 char* getDuplexString(duplexDispositionEnum duplex); 246 char* getColorThemesString(colorThemes colortheme); 247 248 sint32 currStripHeight; 249 char currMediaName[256]; 250 duplexDispositionEnum currDuplexDisposition; 251 colorSpaceDisposition currColorSpaceDisposition; 252 debugDisposition currDebugDisposition; 253 compressionDisposition currCompressionDisposition; 254 mediaOrientationDisposition currMediaOrientationDisposition; 255 renderResolution currRenderResolution; 256 int currRenderResolutionInteger; 257 void *allocatedOutputBuffer; 258 void *leftoverScanlineBuffer; 259 260 int mediaWidth; 261 int mediaHeight; 262 int mediaWidthInPixels; 263 int mediaHeightInPixels; 264 colorSpaceDisposition destColorSpace; 265 colorSpaceDisposition sourceColorSpace; 266 int scaleFactor; 267 bool genExtraPage; 268 jobStateEnum jobOpen; 269 int currSourceWidth; 270 int currSourceHeight; 271 int srcNumComponents; 272 int dstNumComponents; 273 int numLeftoverScanlines; 274 ubyte *scratchBuffer; 275 int pageCount; 276 bool reverseOrder; 277 int outBuffSize; 278 int currOutBuffSize; 279 int totalBytesWrittenToPCLmFile; 280 int totalBytesWrittenToCurrBuff; 281 char *outBuffPtr; 282 char *currBuffPtr; 283 sint32 currResolution; 284 float STANDARD_SCALE; 285 sint32 DebugIt; 286 sint32 DebugIt2; 287 sint32 objCounter; 288 289 sint32 yPosition; 290 sint32 infoObj; 291 sint32 pageOrigin; 292 sint32 *KidsArray; 293 sint32 numKids; 294 // XRefTable storage 295 sint32 *xRefTable; 296 sint32 xRefIndex; 297 sint32 xRefStart; 298 char pOutStr[OUT_STR_SIZE]; 299 bool adobeRGBCS_firstTime; 300 bool mirrorBackside; 301 sint32 topMarginInPix; 302 sint32 leftMarginInPix; 303 bool firstStrip; 304 sint32 numFullInjectedStrips; 305 sint32 numFullScanlinesToInject; 306 sint32 numPartialScanlinesToInject; 307 308 PCLmSUserSettingsType *m_pPCLmSSettings; 309 char returnStr[256]; 310 }; 311 312 #endif /* _PCLM_PARSER_ */ 313 314 315