Current status of Image Conversion Library - as of 18th January 2002

Perforce Changelist No: 145068
Chapter 1	Components:
1.	Image Conversion Library framework
Functionally complete. Compiled but not tested on all ARM flavours and compiled and tested on WINS.
Decodes single or multiple frame images. Decodes images with mask bitmaps. Decodes from file or from buffer. Can handle large images. Requires client’s file session. Provides format specific properties of decoded image.
Streaming decoding is handled through the same interface as normal decoding. 
Encodes single images. Encodes to file or to buffer. Can handle large images. Can use client’s file session or create/delete its own. Allows format specific configuration of encoding parameters. 
Rotates internal format (CFbsBitmap) bitmaps. Scales internal format (CFbsBitmap) bitmaps.
Uses ECom. Uses its own custom ECom resolver.
API modified to better support streaming.
Has been successfully tested for memory leaks and OOM.
Streaming decoding still under development!
Getting an encoding/decoding by MIME type is complete but not yet tested
2.	Custom Resolver
Functionally complete. Compiled but not tested on all ARM flavours and compiled and tested on WINS.
Enables selection of plugin by image type and sub-type or by matching the image header and can also be used to provide a displayable list of available encoders or decoders.
Not OOM tested yet
3.	Decoders
All decoders have been compiled and tested on WINS. Limited testing on Assabet.
Unless otherwise stated, all decoders are for single frame formats.
Unless otherwise stated. Streaming remains under development.
3.1.	BMP
The decoder is functionally complete. Works with streaming
3.2.	GIF
GIF is a single or multi frame format. The decoder is functionally complete for both.
The GIF decoder fully supports conversion using a masked bitmap.
3.3.	JPEG
The decoder is functionally complete.
3.4.	MBM
MBM is a single or multi frame format. The decoder is functionally complete for both.
3.5.	PNG
The decoder is functionally complete.
The PNG decoder fully supports conversion using a masked bitmap.
3.6.	SMS OTA
The decoder is functionally complete.
OTA will only support single image decoding
3.7.	TIFF
TIFF is a single or multi frame format for group 3 images only. The decoder is functionally complete.
3.8.	WBMP
The decoder is functionally complete.
OTA will only support single image decoding
3.9.	ICO
ICO is a single or multi frame format. The decoder has been implemented (but it is currently broken).
Implemented for single frames but currently broken – fix when implement multi-frames.
May still have some memory leaks. Not OOM tested yet.
3.10.	WMF
The decoder is functionally complete.
4.	Encoders
All encoders have been compiled but not tested on all ARM flavours and compiled and tested on WINS.
All encoders are for the encoding of single frames.
4.1.	BMP
The encoder is functionally complete.
4.2.	GIF
The encoder is functionally complete.
4.3.	JPEG
The encoder is functionally complete.
4.4.	MBM
The encoder is functionally complete.
5.	Media Server compatibility wrapper
This is a wrapper intended to go around the Image Conversion Library and make it look like the old Media Server, enabling old software to run largely unchanged apart from recompilation (although some of the more obscure features have been dropped). It directly replaces the MediaClientImage.dll of the original mediasvr code.
It has been compiled and tested on WINS and works – except for areas that depend on unfinished functionality in the Image Conversion Library.
The TVideo.app test harness works using this wrapper, except where there are problems with the Image Conversion Library. Tvideo.app does not supportoperations that use use low level mediaserver code, eg. Frameinfo and Straemplay A cut down version of the TMDAVid.exe,TMDAFailVid.exe and TMDAStressVid.exe test harnesses hava also been used to perform tests of this submodule.
Streaming not yet working due to constraints in the Image Conversion Library.
6.	Testing
6.1.	T_ImageConvert
This is mostly a piece of “smoke test” software. We wrote as we went along – as each new feature was implemented, a new test was added to exercise it. Decoding tests display images on screen while encoding tests produce files that can be looked at in other packages.
It does little more than check that a particular feature works. It does not do rigorous heap or OOM checking.
6.2.	TImage
This is some of the old test code for the Media Server. It has been adapted to use the new Image Conversion Library and runs a large number of rigorous tests that exercise the entire library. The tests check their results by comparing the result to a known reference image.
Most of the tests pass. This depends on the state of image conversion streaming support.
6.3.	TImageViewer application
This is more of the old Tvideo test code for the Media Server. It has been ported across to use the new Image Conversion Library code. Should provide more rigorous tests.
Most tests run – test completeness is limited by the state of streaming support.
7.	Documentation

7.1.	Current Status
This document
7.2.	Printed Documentation
This is being worked on. It needs updating to reflect the changes in the client interface that have been made during implementation as improvements were recognized. Several sections are complete but it needs more work.
Not completed yet.
7.3.	In-source Documentation
We have a mechanism by which, if we put specially formatted comments into the source code, they can be extracted and formatted to provide SDK documentation. Most framework functions that should have these have now had them added and many other framework functions have normal comment headers – though it still requires some work to complete.
Some of the functions in the plugins are commented although considerable work remains to be done here.
In-source docs incomplete.
8.	Changes since last

•	More memory leaks removed.
•	Major work done on streaming, both in terms of the API and the internal architechture.
•	API changes
•	Introduction of ContinueConvert, to explicitly convert in streaming situations.
•	Can open decoder even if insufficient data for recognition of first frame.
•	ContinueProcessingHeaderL call to be called when more data arrives, when looking at headers and HeaderProcessingComplete. This is done to indicate that we know what frames we have.
•	Major internal changes to allow handling when not all frames are initially present and to properly handle when headers are only partially present.
•	Addition of TImageViewer.
•	Extra tests in Timage.
•	Builds and partially runs on target. TimageViewer runs well. Requires all images to be tested. Timage still requires a small amount of attention.
•	Fix for Gif files with large comment blocks.