665
DRIVER_ERROR LJZjStream::preProcessRasterData(cups_raster_t **ppcups_raster, cups_page_header2_t* firstpage_cups_header, char* pSwapedPagesFileName)
667
int current_page_number = 0;
672
DRIVER_ERROR driver_error = NO_ERROR;
673
cups_page_header2_t cups_header;
674
cups_raster_t *swaped_pages_raster=NULL;
675
cups_raster_t *even_pages_raster=NULL;
676
cups_raster_t *odd_pages_raster = NULL;
677
BYTE* pPageDataBuffer = NULL;
678
char hpEvenPagesFile[64];
679
char hpOddPagesFile[64];
680
snprintf(hpEvenPagesFile, sizeof(hpEvenPagesFile), "%s/hplipEvenPagesXXXXXX","/var/log/hp/tmp");
681
snprintf(hpOddPagesFile, sizeof(hpOddPagesFile), "%s/hplipOddPagesXXXXXX", "/var/log/hp/tmp");
683
if (1 != m_pJA->pre_process_raster || !cups_header.Duplex){
687
dbglog ("DEBUG: Getting Swaped Pages Raster.....\n");
689
memcpy(&cups_header, firstpage_cups_header, sizeof(cups_page_header2_t));
691
//Create temp files to store odd, even and swaped pages.
692
fdEven = mkstemp (hpEvenPagesFile);
693
fdOdd = mkstemp (hpOddPagesFile);
694
fdSwaped = mkstemp (pSwapedPagesFileName);
695
if (fdEven < 0 || fdOdd < 0 || fdSwaped < 0){
696
dbglog ("ERROR: Unable to open temp output files for writing\n");
697
driver_error = SYSTEM_ERROR;
701
even_pages_raster = cupsRasterOpen(fdEven, CUPS_RASTER_WRITE);
702
odd_pages_raster = cupsRasterOpen(fdOdd, CUPS_RASTER_WRITE);
703
if (even_pages_raster == NULL || odd_pages_raster == NULL) {
704
dbglog("cupsRasterOpen failed for even_pages_raster or odd_pages_raster\n");
705
driver_error = NULL_POINTER;
709
pPageDataBuffer = new BYTE[cups_header.cupsBytesPerLine+1];
710
if (pPageDataBuffer == NULL) {
711
driver_error = ALLOCMEM_ERROR;
718
current_page_number++;
719
if(current_page_number % 2) {
720
cupsRasterWriteHeader2(odd_pages_raster, &cups_header);
723
cupsRasterWriteHeader2(even_pages_raster, &cups_header);
726
// Iterating through the raster per page
727
for (int y = 0; y < (int) cups_header.cupsHeight; y++) {
728
cupsRasterReadPixels (*ppcups_raster, pPageDataBuffer, cups_header.cupsBytesPerLine);
729
if(current_page_number % 2) {
730
cupsRasterWritePixels (odd_pages_raster, pPageDataBuffer, cups_header.cupsBytesPerLine);
733
cupsRasterWritePixels (even_pages_raster, pPageDataBuffer, cups_header.cupsBytesPerLine);
737
} while (cupsRasterReadHeader2(*ppcups_raster, &cups_header));
739
cupsRasterClose(even_pages_raster);
740
cupsRasterClose(odd_pages_raster);
742
//Now read even and odd pages rasters and then put into swaped raster
743
if ((fdEven = open (hpEvenPagesFile, O_RDONLY)) == -1) {
744
perror("ERROR: Unable to open evenpage raster file for reading.");
745
driver_error = SYSTEM_ERROR;
749
if ((fdOdd = open (hpOddPagesFile, O_RDONLY)) == -1){
750
perror("ERROR: Unable to open odd page raster file for writing. ");
751
driver_error = SYSTEM_ERROR;
754
even_pages_raster = cupsRasterOpen(fdEven, CUPS_RASTER_READ);
755
odd_pages_raster = cupsRasterOpen(fdOdd, CUPS_RASTER_READ);
756
swaped_pages_raster = cupsRasterOpen(fdSwaped, CUPS_RASTER_WRITE);
758
if (swaped_pages_raster == NULL || even_pages_raster == NULL || odd_pages_raster == NULL) {
759
dbglog("cupsRasterOpen failed for even_pages_raster or odd_pages_raster or swaped_pages_raster\n");
760
driver_error = NULL_POINTER;
765
loopcntr = current_page_number / 2;
767
if(cupsRasterReadHeader2(even_pages_raster, &cups_header)){
768
cupsRasterWriteHeader2(swaped_pages_raster, &cups_header);
770
// Iterating through the raster per line
771
for (int y = 0; y < (int) cups_header.cupsHeight; y++){
772
cupsRasterReadPixels (even_pages_raster, pPageDataBuffer, cups_header.cupsBytesPerLine);
773
cupsRasterWritePixels (swaped_pages_raster, pPageDataBuffer, cups_header.cupsBytesPerLine);
777
if(cupsRasterReadHeader2(odd_pages_raster, &cups_header)){
778
cupsRasterWriteHeader2(swaped_pages_raster, &cups_header);
780
// Iterating through the raster per line
781
for (int y = 0; y < (int) cups_header.cupsHeight; y++) {
782
cupsRasterReadPixels (odd_pages_raster, pPageDataBuffer, cups_header.cupsBytesPerLine);
783
cupsRasterWritePixels (swaped_pages_raster, pPageDataBuffer, cups_header.cupsBytesPerLine);
789
//Last Page is in odd page file
790
if(current_page_number%2 == 1){
791
cupsRasterReadHeader2(odd_pages_raster, &cups_header);
792
cupsRasterWriteHeader2(swaped_pages_raster, &cups_header);
794
// Iterating through the raster per line
795
for (int y = 0; y < (int) cups_header.cupsHeight; y++){
796
cupsRasterReadPixels (odd_pages_raster, pPageDataBuffer, cups_header.cupsBytesPerLine);
797
cupsRasterWritePixels (swaped_pages_raster, pPageDataBuffer, cups_header.cupsBytesPerLine);
801
cupsRasterClose(even_pages_raster);
802
cupsRasterClose(odd_pages_raster);
803
cupsRasterClose(swaped_pages_raster);
806
delete [] pPageDataBuffer;
807
pPageDataBuffer = NULL;
810
//Now send swaped raster file further processing.
811
if ((fdSwaped = open (pSwapedPagesFileName, O_RDONLY)) == -1){
812
perror("ERROR: Unable to open swaped pages raster file - ");
813
driver_error = SYSTEM_ERROR;
817
*ppcups_raster = cupsRasterOpen(fdSwaped, CUPS_RASTER_READ);
818
cupsRasterReadHeader2(*ppcups_raster, &cups_header);
819
memcpy(firstpage_cups_header, &cups_header, sizeof(cups_page_header2_t));
820
unlink(hpEvenPagesFile);
821
unlink(hpOddPagesFile);
823
return NO_ERROR; //cups_raster;
826
dbglog ("DEBUG:Something went wrong while creating swaped pages raster..\n");
836
delete [] pPageDataBuffer;
839
unlink(hpEvenPagesFile);
840
unlink(hpOddPagesFile);