-------------------- AmigaOS 3.5/3.9 project ------------------------- picture.datatype 43.21 (24.02.1997) - No longer blows up in environments that offer too few stack space. - Uses BestCModeIDTagList() to find the best matching image resolution. picture.datatype 43.22 (01.03.1997) - Cleaned up the library initialization code to avoid race conditions. - The IFF-ILBM picture storage code could run forever for very narrow pictures, i.e. those smaller than 16 pixels per line. - Rewrote and simplified the IFF-ILBM picture storage code, which due to its legacy was overly convoluted. It was not reentrant either (it now is). picture.datatype 43.23 (11.04.1997) - Multiview would not display some pictures properly on a custom screen. While I fixed this problem it has created a new one with Multiview and the P96 software. We'll see about that. - Simplified and cleaned up the picture layout (remapping, dithering, etc.) code. - Removed more confusing and irrelevant dead old code. - Cleaned up the class library core code again. picture.datatype 43.24 (19.04.1997) - Pictures that do not need to be remapped in order to display properly on a screen no longer remain blank. This fixes a bug introduced in 43.22. picture.datatype 43.25 (08.06.1997) - Rewrote the library initialization code (again). picture.datatype 43.26 (29.06.1997) - The DTM_WRITEPIXELARRAY and DTM_READPIXELARRAY methods did not support the RGBA and ARGB pixel formats properly. Fixed. picture.datatype 43.31 (22.2.1998) - Major source cleanup and numerous bug fixes. Too many to mention here... picture.datatype 43.32 (24.2.1998) - Removed more unused variables from the class data area. - True colour pictures now receive their default colour map during the bitmap data allocation process rather than during remapping - Better consistency checking in the V43 read/write pixel array methods. picture.datatype 43.33 (5.3.1998) - The DTM_FRAMEBOX method did not return a non-zero result upon success. - The V43 picture data setup now properly fills in its frame info data. - In the routine that creates bitmap data from chunky image data, a test for CyberGraphX-compatible bitmaps was wired the wrong way; this could produce empty bitmaps. picture.datatype 43.34 (28.5.1998) - The V43 chunky picture data is now stored in a memory buffer which is cleared upon allocation. This means, if image data is omitted from the buffer, no random memory contents will show in the "gaps" [Gunther Nikl]. picture.datatype 43.35 (30.8.1998) - Corrected a problem in the mask plane generation code which appears to show up only with RTG systems. I don't know whether this is a general problem since the code was correct when I wrote it and still is with the small change I made. Nevertheless the problem should be gone now [Allan Odgaard]. picture.datatype 43.36 (3.10.1998) - As it turns out, the V43 pixel read method did not return any data unless the picture storage format (number of bytes per pixels) would match the pixel format requested in the read message. I enhanced the read code to perform "colour expansion" on the source data, i.e. you will always be able to read truecolour picture from an image. However, you may not read chunky pixel data with 256 colours from a truecolour picture. I also fixed a bug in the chunky pixel read code which would have caused the picture data read to consist of a single colour only. Note that the V43 read method requires that the original picture data is stored in chunky format. picture.datatype 43.37 (18.11.1998) - For completeness, the V43 read/write methods now permit reading and writing of chunky data. Pictures in hold and modify format now read as true colour data through the V43 interface. To read properly, however, the data read must start at the leftmost point of the picture. picture.datatype 43.38 (27.11.1998) - In the V43 method interface, the HAM8 conversion code was using the wrong HAM modifier values. picture.datatype 43.39 (12.12.1998) - Even more wrong HAM modifier values corrected. picture.datatype 43.40 (19.12.1998) - If a picture is no longer in its original format (e.g. true colour), the datatype will no longer refuse to store its on-screen image in a file or the clipboard. - When converting chunky pixel data into a bitmap the datatype no longer enforces conversion into a CyberGraphX native bitmap if a plain and regular bitmap (with 1..7 bit planes) would be perfectly sufficient [Stephan Rupprecht]. This fixes IBrowse, whose navigation buttons can otherwise get trashed. picture.datatype 43.41 (20.12.1998) - More cleanup work in the code that saves pictures to files or to the clipboard. Among other things, its memory requirements aren't quite that high any more. picture.datatype 43.42 (10.1.1999) - Even more cleanup work. picture.datatype 43.43 (22.1.1999) - Restricted CyberGraphX bitmap creation calls to 15 bit and greater. picture.datatype 43.44 (24.1.1999) - Cleaned out some more dead and unused code and data structures. - Unified all planar to chunky and chunky to planar conversion code. - The datatype now defaults to destination mode V43, which it implicitly always assumed to be set. - The layout code now adapts HAM and extra halfbrite picture data for display on a palette mapped screen if this is necessary. - The V43 read pixel interface now properly returns extra halfbrite and HAM data, regardless of where the reads start horizontally. - When laying out a picture for display on a truecolour or hicolour screen, the layout process now turns the picture into truecolour format. picture.datatype 43.45 (25.1.1999) - When laying out the picture for display on a hicolour screen, the data will be dithered. There is no longer a user configurable option to influence this. - Removed support for the PromoteHAM environment variable. - Cleaned up the layout and storage routines which now both propagate error codes properly. picture.datatype 43.46 (26.1.1999) - Corrected the use of the PDTA_Allocated attribute in the OM_GET method. It used to return a pointer to memory space, which is clearly not what it should do (according to the documentation). Now it returns the same as the PDTA_NumAlloc attribute. - The code now watches and handles pen allocation failures gracefully instead of ignoring them altogether. There also is better error handling code in the dithering routines now. - Rewrote the task stack swapping code. picture.datatype 43.47 (26.1.1999) - Changed the way picture.datatype treats data passed to it via the subclass. This makes is possible to restart the layout process, provided picture.datatype has not yet discarded the source picture data. Note that from now on the V43 source mode implicitely sets the PDTA_FreeSourceBitMap attribute to TRUE. - The DTM_REMOVEDTOBJECT and DTM_RELEASEDRAWINFO methods now cause the object layout process to be restarted the next time it is invoked. Note that the result of the previous layout process will stay valid until you restart the process. - The DTM_OBTAINDRAWINFO now returns NULL if the picture object has not yet passed the layout process. - The dithering technique picture.datatype uses for palette mapped pictures should now run faster and yield better picture quality. picture.datatype 43.48 (30.1.1999) - Further cleanup work and data structure changes. - Further changes to make it possible to reverse the results of the layout process. picture.datatype 43.49 (30.1.1999) - Implemented Roland Mainz' DTM_OBTAINDRAWINFO method. Previously, you had layout the picture object before you could successfully invoke this method. - Reorganized the entire source code, putting the pieces back together I came up with when I took the initial source code structure apart. picture.datatype 43.50 (31.1.1999) - V43 source mode no longer implies setting PDTA_FreeSourceBitMap to TRUE. - The DTM_ASYNCLAYOUT method now responds to the ^C signal. In other words, it can be stopped while it is in progress. - Fixed a bug in the OM_SET method which could cause chunky image data not to reach the layout stage. Its colour tables would not always get allocated. - The DTM_OBTAINDRAWINFO method now always restarts the layout process if the screen to layout to differs from the last one used. - Some palette mapped pictures did not get a transparent mask created. Fixed. - Without CyberGraphX around to translate true colour data into well-formed bitmaps, the layout code would fail to create palette mapped image data and often even missed the chance to use as many colours as the display would permit. It now performs much smarter in this respect. picture.datatype 43.51 (7.2.1999) - Further cleanup work and code polishing. - The layout process could try to return the source bitmap "as is" if there was no further need to remap the picture. In some cases this would return NULL bitmap pointers due to the fact that chunky V43 mode picture data had been supplied but no source bitmap. Fixed. picture.datatype 43.52 (18.2.1999) - The set method did not properly set up the display properties for every mode ID passed in. - Simplified the code that selects the display mode properties we don't want when looking for a new mode. - Removed a special case from the display mode setup code which was actually taken care of already by the main branch of the code. - Finally found out that DI_AVAIL_NOTWITHGENLOCK actually means "this mode is not available because there is a genlock connected" rather than "this mode will not be available if somebody connects a genlock". This caused changes in the mode selection logic. picture.datatype 43.53 (21.2.1999) - The mode selection code now handles a special case: if a HAM8 mode picture is to be assigned a new display mode, the code now checks if there is a HAM8 display mode available and not just merely a HAM6 mode. - The layout process is now invoked every time the layout method is entered. No old data is being cached. picture.datatype 43.54 (15.3.1999) - The picture storage code now uses the "colour map is really eight bits wide" flag. picture.datatype 44.1 (27.3.1999) - Fixed a bug in the ByteRun1 compressor that went unnoticed for the previous 14 years. picture.datatype 44.2 (11.4.1999) - The DTM_PRINT method now allows for bitmaps to be printed that don't have a colour map attached. This is supported only for non-palette mapped pictures (true colour and its like) with printer.device V44. I have also added better error reporting. The method now fills in the DTA_ErrorLevel and DTA_ErrorNumber attributes as passed to the routine with the dtPrint message. picture.datatype 44.3 (20.4.1999) - Introduced the PDTA_WhichPicture and PDTA_GetNumPictures tags. picture.datatype 44.4 (22.4.1999) - Replaced the few environment variable options with real control tags. picture.datatype 44.5 (1.6.1999) - The V43 pixel read method no longer performs an implicit colour space conversion when returning HAM/EHB data for 8 bytes per output pixel. picture.datatype 44.6 (6.6.1999) - The OM_SET method now always sets the error level/error number values upon completion of the routine. This happens regardless of whether the routine completed successfully or failed. The same is done for the DTM_PRINT method. picture.datatype 44.7 (4.7.1999) - Clamping code was missing in all the Floyd-Steinberg dithering routines, causing some pictures to look "overexposed". Fixed. picture.datatype 44.8 (19.7.1999) - Changed the default number of pens to use for dithering to a maximum of 125. Default pen allocation precision is now at PRECISION_IMAGE. picture.datatype 44.9 (8.8.1999) - Now supports printing chunky data via the new PRD_DUMPRPORTTAGS printer.device command. picture.datatype 44.10 (9.8.1999) - When switching the datatype into V43 mode with eight bits per pixel to be used for the picture, the datatype now starts by allocating 256 colours for it. The client can of course override this setup. - Chunky greyscale data now affects the default picture colour palette. When the first line of greyscale data is written to the picture buffer, the datatype will reset the colour palette to 256 shades of grey. picture.datatype 44.11 (17.8.1999) - PDTM_READPIXELARRAY method was completely and utterly broken. Fixed. picture.datatype 44.12 (21.8.1999) - One of the reasons why the PDTM_READPIXELARRAY method did not work was that the wrong variable was used to store pixel data at a specific memory location. As it turned out, the same wrong variable error was also present for the planar conversion code. Fixed. - Simplified the PDTM_READPIXELARRAY planar case a bit. picture.datatype 44.13 (31.8.1999) - Palette size changes now preserve colours. picture.datatype 44.14 (7.9.1999) - Simplified the dithering setup code a bit after discovering that "massaging" the first line of data to be used for dithering had no impact whatsoever. - Took out the special "simpler" dithering case used for improving the appearance of 24 image data on a 15/16 bit display since it did not improve performance as expected. picture.datatype 44.15 (11.9.1999) - Added a new tag PDTA_AllocatedPens to obtain a pointer to the colour remapping table. picture.datatype 44.16 (12.9.1999) - Rewrote the ordered dithering code from scratch. picture.datatype 44.17 (23.9.1999) - When printing image data, the picture will be printed using the original mode ID and colour palette active before the layout process was executed. This fixes HAM picture printing and printing of palette mapped images that appeared on a true colour screen. picture.datatype 44.18 (1.10.1999) - The same problem that caused the picture palette to be trashed while printing also affected copying/saving image data. Fixed. picture.datatype 44.19 (1.10.1999) - When reading grey scale data from a palette mapped picture with the PDTM_READPIXELARRAY method, picture.datatype now performs a colour conversion to yield real grey scale data instead of returning the original data "as is". picture.datatype 45.4 (18.10.00) - changes done by H&P. - Made a fat-binary for PPC-support. picture.datatype 45.6 (24.10.00) - Added new method PDTM_SCALE to scale the pixel data to a new size. PDTM_SCALE can only be called between OM_NEW and the first GM_LAYOUT. The new attribute PDTA_ScaleQuality can be set to 0 for bad quality and high speed or any other value for good quality and low speed. - Introduced the environment variable PICTUREDTNOPPC for test purposes. If it is set to 1, the PPC won't be used for any operation. picture.datatype 45.7 (02.11.00) - Again works, if cybergraphics.library is not available (lost in 45.4). - The powerpc.library will now be opened just before the first ppc-code is called (i.e. no longer in LibOpen()). This became necessary, because some subclasses open the picture.datatype within their LibInit()- function (i.e. in ramlib context). Opening the powerpc.library in ramlib context seems to be a bad idea, besides the stack topic. picture.datatype 45.8 (20.04.2001) - all changes were done by Stephan Rupprecht. - remapping didn't work correctly for pictures using less colors than defined by their colormap. - saving the selected part of a picture object didn't work because the wrong modulo was used when the imagedata didn't came from a bitmap. - changed some SetSignal(0,0) to SetSignalPPC(0,0) because WarpUP allows to check for SIGBREAKF_CTRL_C via the mirror function (this is internally done by WarpUp by patching exec.library/Signal). picture.datatype 45.9 (01.05.2001) - dithering an image down to 8bit works faster on the PPC, now (less context-switches). - remapping of palettemapped imagedata (<= 8bit) will be done by the PPC, if available. - reintroduced the environment variable classes/datatypes/picture/DitherHiColour. If it is set to 0, it'll disable dithering of 24bit images on 15/16 bit screens. - the memory for the imagedata was cleared via memset(), that was a bit slow... - all memory that could be write-accessed by the ppc is now properly aligned to 32byte boundary. picture.datatype 45.10 (28.06.2001) - PDTA_DestMode defaults to PMODE_V42, now. This should fix problems with applications that can't handle non-planar/foreign bitmaps (eg FW97). Introduced the env variable "classes/datatypes/picture/ForceV43" for test purposes. If it is set to 1, PDTA_DestMode will default to PMODE_V43 again. picture.datatype 45.11 (??.07.2001) - posted to the OS3.9 betalist by accident. picture.datatype 45.12 (11.07.2001) - recompiled the whole datatype this seems to fix Sinans problem of getting corrupted images. - just for testing purpose the datatype has an internal list of all programs that support PMODE_V43 even though they don't request this mode (MultiView, IPrefs, AmigaGuide, WBStartup++). picture.datatype 45.13 (28.08.2001) - the env variable "classes/datatypes/picture/ForceV43" holds a list of all programs that should be forced to v43 mode, now. The new preferences editor should be used to change this variable. picture.datatype 45.14 (17.02.2002) - more v42 compatiblity: the bmh_Depth field of the bitmapheader structure is now limited to the maximum depth the selected destination mode supports (8 for v42 mode). picture.datatype 45.15 (20.02.2002) - temporary bitmaps for planar<->chunky are no longer allocated with a depth greater 8 even when the friend bitmap has more than 8 bit. This and limiting the allocation depth of the remapped bitmap to 8bit when modev42 is enabled, fixes the problem that the AmigaWriter about window contains just a black image when cgx is installed and the image is remapped to a hi-/truecolor screen. picture.datatype 45.16 (15.03.2002) - the 45.14 fix could break the saving routine. picture.datatype 45.17 (19.03.2002) - the 45.14 fix could also break some subclasses of picture.datatype (namely ilbm.datatype v44.9). The bmh_Depth field is now changed to 8bit in PDTM_WRITEPIXELARRAY to workaround the problem (yes, the v42 API sucks;). Let's hope that this won't break anything else... picture.datatype 45.18 (30.03.2002) - fixed the corrupt background problem of ImageFX4: the datatype returned a non planar bitmap even when PMODE_V42 was requested. This didn't work well unless the FORCECHUNKY option of cgx was activated. This also seems to fix the Twist2 problem of crashing when not configured to v43 mode. picture.datatype 45.19 (24.04.2002) - the last fix introduced some enforcer hits because a NULL pointer check was missing. picture.datatype 46.1 (28.9.2002) - due to the legal state of the v45 sources, I had to take the 44.19 sources and reimplement all changes done since v45. This version is no mixed-binary (ppc/68k) for obvious reasons;) -------------------- AmigaOS 3.1.4.(1) project ----------------------- picture.datatype 46.2 (19.11.2017) - Added utility.library stub functions again. - Aligned library bases to long-word boundaries. - Minor rework of some files to make it compilable with SAS again. - Replaced the blue noise dithering by a somewhat faster algorithm with less divisions in it. picture.datatype 46.3 (22.11.2017) - Removed the blue noise algorithm. Does not make any visible difference in quality and is just slow. picture.datatype 46.4 (17.4.2018) - In case pen allocations fail on palettized screens, the partially allocated pens are now released immediately. picture.datatype 46.5 (17.5.2018) - The picture datatype now attempts to lock semaphores first, and fails rendering in case any of the semaphores is not available. This should hopefully avoid deadlocks, though it may cause situations where no picture is rendered because the required lock is kept by another task. - The draw method can now also be called if the rastport is not layered, it just does not clip then. picture.datatype 46.6 (20.5.2018) - Due to a misplaced bracket, the picture datatype did not release an essential lock, blocking all rendering after the first render instruction. picture.datatype 46.7 (24.5.2018) - Even though the datatype was compiled for the 68K, it required at least a 68020 and failed if none was there. picture.datatype 46.8 (29.6.2018) - The picture scaling algorithm could only upscale, but not downscale. Fixed. - The minimum acceptable stack size is now 6K, and no longer 8K. Otherwise, every recursive call of the picture datatype into itself would allocate a new 8K stack by itself, which wastes a lot of memory. picture.datatype 46.9 (4.7.2018) - In case printing is aborted, the picture datatype attempted to send a reset sequence to the printer. This, however, does not do any good in case the printer is in the middle of a CSI sequence anyhow, and it does not any good in case the printer is off-line since it simply hangs the datatype. Hence, printing this sequence has been removed. picture.datatype 46.10 (28.7.2018) - The stack size check did not work reliable in case a CLI program swapped its stack itself. picture.datatype 46.11 (10.8.2018) - In case a target screen was given as reference, and a sparse color table to be used for rendering, the screen color table was carried over incorrectly, and hence target pens were selected incorrectly, resulting in a sub-optimal assignment of pens for the remapped picture. picture.datatype 46.12 (25.8.2018) - The interpretation of ENV:classes/datatypes/picture/forcev43 changed in the middle. It used to be a boolean yes/no variable, but it is now a list of programs to promote silently to the V43 syntax. As this could have created conflicts with left-over settings from older releases, a workaround was added to enforce the default promotion rules if the variable is "yes" or "no". picture.datatype 46.13 (10.9.2018) - Fixed another race condition in LibOpen. -------------------------- AmigaOS 3.2 project ----------------------- picture.datatype 46.14 - In case the view mode selection and the number of colors was set in the wrong order, the histogram for remapping was not reallocated, though the number of colors stayed beyond the histogram size, causing a crash. Now, if the picture datatype has to fall back to a lower depth, the number of picture colors is not touched. picture.datatype 47.1 (5.4.2020) - Removed the now unused code from this project. - The PDTA_Mask attribute now is writable for the benefit of ilbm.datatype. picture.datatype 47.2 (12.5.2020) - now uses Exec memory copy function for WritePixelArray and ReadPixelArray instead of relying on the compiler runtime picture.datatype 47.3 (14.5.2020) - Pictures whose source comes in the form of chunky image data instead of a standard bitmap can now be scaled up to 65535 times their width and height, rather than only 255 times. [Backported from AOS4 V46.2] - Interpolated upscaling would forget to fill the last few rows of the destination picture; now fixed. [Backported from AOS4 V46.2] - Changing PDTA_NumColors from a non-zero value to a greater one would cause reads from unallocated memory, because too much color data was being copied internally. Now fixed. [Backported from V52.2] - The palette allocated for a truecolor picture would always be of 224 colors, even when a greater number of colors had been specified via PDTA_NumColors. This would later cause memory trashing by attempting to write color data past the end of the allocated space. Now fixed. [Backported from V53.5] - Fixed the minimal palette initialization for a truecolor picture not having an own color table; the four mouse pointer colors were copied repeatedly until the end of the color table, and due to the above bug, the 32-bit color registers (CRegs/GRegs) could also get trashed as a result. [Backported from V53.5] - The allocation of standard (planar) bitmaps was broken under P96 due to a difference in behavior between P96's CyberGraphX emulation and the original CyberGraphX. As a result, a hicolor or truecolor bitmap could be returned to the client even in legacy V42 mode. Now fixed. [Backported from V53.5] - Performing a layout of a truecolor picture on a truecolor screen in legacy V42 mode would incorrectly set PDTA_NumColors to 1 even when the picture actually had a larger color table after the layout. Now fixed. [Backported from V53.5] - In case a CLUT (i.e. palette mapped) picture needs to be promoted to truecolor format by a layout or scaling process, the depth field of its BitMapHeader is no longer changed to a value greater than 8 if the client is operating in legacy V42 mode. [Backported from V53.5] - The "Classes/DataTypes/Picture/DitherHiColour" environment variable is no longer read when a truecolor picture undergoes a layout on a truecolor screen; now that will only be done when the target screen is actually a hicolor one. [Backported from V53.5] - Added an alternative interpolation method for upscaling which yields smoother and more accurate results but is also a little slower. The code is currently disabled; it can be enabled at compile time with a preprocessor definition change. - Pictures whose source comes in the form of a standard bitmap in CHIP memory couldn't be safely upscaled vertically when the destination's width was greater than 1008 pixels. This is due to BitMapScale() not supporting "big blits" even on ECS or AGA; attempting such a scaling would produce artifacts or even corrupt the memory list. This is now solved (except on OCS machines) by calling a replacement scaling routine whenever this particular situation is detected. - Fixed and cleaned up the documentation a little. picture.datatype 47.4 (14.5.2020) - amendment to the V43 interface for sub-Datatypes picture.datatype 47.5 (22.5.2020) - changed behaviour of direct pixmap access for sub-Datatypes for 8 Bit inputs. Now the internal map is of the type LUT8 for 8 bit inputs instead of GRAY8. It is necessary to write the color map in order to complete the input phase for 8 bit types successfully.