libavcodec/zmbvenc: Add support for RGB formats
authorMatthew Fearnley <matthew.w.fearnley@gmail.com>
Thu, 7 Mar 2019 14:42:09 +0000 (14:42 +0000)
committerTomas Härdin <tjoppen@acc.umu.se>
Thu, 14 Mar 2019 10:04:47 +0000 (11:04 +0100)
commit0321370601833f4ae47e8e11c44570ea4bd382a4
tree82c2269afd039df7e347a5b0e67b11f8ab86699d
parentc2a221c5ae5017e11654b9688ac97e9f5d3570b2
libavcodec/zmbvenc: Add support for RGB formats

This consists mostly of the following changes:
- add newly supported pixel formats (RGB555LE, RGB565LE, BGR0)
- select the ZMBV format (c->fmt) and bytes per pixel (c->bypp) based on
  avctx->pix_fmt
- multiply widths/x-values by c->bypp, in places where bytes, not pixels, are
  expected
- disable palette-writing code for non-palette pix_fmts
- make a note about histogram[]'s datatype (it could need increasing if
  ZMBV_BLOCK is increased)
- adjust the c->score_tab length to take up to (and including) 4 times the
  number of pixels in a block
- initialise c->score_tab up to c->bypp * the number of pixels

Note: the ZmbvFormat enum allows for additional bit depths:
- 1,2,4-bit (palette)
- 24-bit (RGB)

At time of writing the specifics of these (e.g. channel order, bit alignment)
are not currently defined, and DOSBox only implements support for 8/15/16/32
bpp.
One might expect the 24-bit format - if implemented - to be BGR24, to have the
same channel order as BGR0.
However, the decoder in zmbv.c has been guessed to use RGB24, so I have chosen
to not contradict this, and omitted specific support for this format.
libavcodec/zmbvenc.c