📄 changes_from_vm3_2a.txt
字号:
CHANGES IN VM4.0 FROM VM3.2A
============================
______________________________________________________________________________
Bug Fixes
------------------------------------------------------------------------------
* A bug in the tiling implementation which was found by Motorola.
Specifically, the tile dimensions supplied on the command line arguments
identify the maximum allowable dimensions of any tile. The system computes
actual tile dimensions subject to these limits based upon desirable
relationships between different components (component dimensions are
arbitrary) and the requirement that the nominal tile dimensions are powers
of 2 so that only tiles on the right and lower boundaries of the image
may have non-power-of-2 tile dimensions. This usually means that actual
tile sizes will be the largest power of 2, not exceeding the supplied
dimensions, but in the special case where one or more of the supplied
dimensions is equal to or larger than the largest corresponding dimension
amongst all the image components, the nominal tile size may be set to
a power of 2 which is larger than the respective image component dimension
without violating the constraints. The bug lay in the fact that this
special condition was not taken into account in the code which can lead
to unexpected results when using the software. The bug fix involves minor
changes to the code in "std_forward_info.c", within the function,
"__initialize", immediately following the section comment,
"Construct tiles and find all dimensions".
* A bug in the implementation of multiple ROI's with arbitrary geometry
was detected and fixed by David Taubman. The fix involes a minor change
to the implementation of file "ref_roi_common.c" in function
"roi_buffer__access_rows".
______________________________________________________________________________
ROI Changes
------------------------------------------------------------------------------
* Inclusion of the rectangular mask generation code from VM3.0A, which
had been dropped in VM3.2A. Included code differs somewhat in
implementation to minimize redundancy between generic mask generation
implementation and rectangular mask generation implementation.
Changes to the code associated with this capability are identified by
the key phrase "ROIrect", which appears in comments against individual
lines and in bracketing comments. The files which include changes of
this type are:
-- "ref_forward_roi.c"
-- "ref_reverse_roi.c"
-- "ref_roi_common.c"
-- "ref_roi_common.h"
The modification takes tiling and frames into account to produce exactly
the same ROI mask as that which would be generated using the arbitrary
shape implementation, provided the regions are rectangular in shape.
A new command-line flag is introduced, `-Rno_rect', which can be
applied during compression and/or decompression to suppress the use
of the efficient ROI mask generation implementation when the regions
all have rectangular geometry. This allows the user to compare the
results of the ROI mask generation used for rectangular regions with
that used for arbitrary shape regions to confirm that they agree. If
the option used during compression differs from that used during
decompression, any differences in the implementations should lead to
serious artifacts in the reconstructed image and so will easily be
detected.
* Inclusion of an explicit command-line argument to force the use of the
`max-shift' method -- in VM3.2A the `max-shift' method was used
automatically if the scaling factor for the ROI was sufficiently large,
but this obscured the existence of the mode. The new flag is
`-Rmax_shift'. The modifications to the code are minor and are
restricted to the files:
-- "ref_forward_roi.c"
-- "ref_reverse_roi.c"
_______________________________________________________________________________
Error Resilience
-------------------------------------------------------------------------------
* Included error detection marker between bit-planes in the embedded block
bit-streams. Code supplied by Sarnoff corporation and modified slightly
by David Taubman. There are very few changes. The changes are identified
by comment banner lines containing the keyword "Sarnoff" and are
restricted to the following files:
-- "ebcot_encoder.c"
-- "ebcot_decoder.c"
-- "ebcot_encoder.h"
-- "ebcot_decoder.h"
______________________________________________________________________________
Major Changes to the Global Header of the Bit-Stream
------------------------------------------------------------------------------
Gene Wu, RSV
* The actual bytes written to the global header have been changed to
a marker/tag based structure to be compatible with JPEG parts I & III.
This has the added benefit that the global header is no longer dependent
on the particular of calls to push_global_header(), likewise the decoder
no longer needs to ask for items with pull_global_header() in the exact
order the encoder wrote them.
* This is currently accomplished by giving push_ & pull_ global_header
algorithmic knowledge about the values being pushed. In the future
it will be good if various objects request items close to the way
they are stored in the global header.
______________________________________________________________________________
Tiling
------------------------------------------------------------------------------
Michael Gormish, RSV
The arrangement of the coded data written to the bitstream has been
changed. Formerly, data could be written in "SNR progressive" or
"resolution progressive" order. Now the data is always in "Tile
progressive" order, but within a tile the data can be either "SNR
progressive" or "resolution progressive" order. The coded data is
currently identical to VM3_2A in the case of one tile. There is a
brief tile header (currently 12 bytes) before each tile, containing
Start of Tile (SOT), Tile Length Tile (TLT), and Start of Scan (SOD)
markers. The Tile Length allows spatial access to regions of the image
without decoding even the packet header syntax. The length and
information included in the tile header will change in future
versions.
The basic structure of objects has not been changed. In particular
there is still a linked list of tiles within each subband of each
transform level for all layers and components.
form_packet() in ebcot_send_bits.c is now form_tile_packet(), because
it only forms a packet with header and coded data for one tile. An
equivalent change occures with receive_packet() in
ebcot_receive_bits.c. ebcot_send_bit_stream() has been changed to
loop over tiles first, then layers and resolutions (in either order).
The function write_tile_header() has been added to the bitstream object.
Thus tile headers are independent of packets, and in particular are not
stuffed (because tile headers contain markers).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -