[FFmpeg-devel] [PATCH] Use RGB555LE/RGB565LE pixfmts instead of byte swapping in bmpenc
Kostya
kostya.shishkov
Wed Mar 25 06:47:26 CET 2009
On Tue, Mar 24, 2009 at 04:56:30PM -0500, Daniel Verkamp wrote:
> On Tue, Mar 24, 2009 at 3:19 PM, Daniel Verkamp <daniel at drv.nu> wrote:
> > Hi,
> >
> > The recent addition of LE/BE pixfmts for 15/16-bit RGB allows some
> > simplification in the bmp encoder.
> >
> > Thanks,
> > -- Daniel Verkamp
> >
>
> Similar patch for bmp decoder; also consolidates almost-identical
> cases for 8, 16, and 24bpp.
>
> Thanks,
> -- Daniel Verkamp
> From 30c006f15a596fa867552081bd8a3cfc21a530ee Mon Sep 17 00:00:00 2001
> From: Daniel Verkamp <daniel at drv.nu>
> Date: Tue, 24 Mar 2009 16:56:41 -0500
> Subject: [PATCH] bmp decoder: consolidate 8, 16, 24bpp line copying and use new LE 16-bpp pixfmts
>
> ---
> libavcodec/bmp.c | 28 +++++++---------------------
> 1 files changed, 7 insertions(+), 21 deletions(-)
>
> diff --git a/libavcodec/bmp.c b/libavcodec/bmp.c
> index 14c070d..ff1b344 100644
> --- a/libavcodec/bmp.c
> +++ b/libavcodec/bmp.c
> @@ -159,9 +159,9 @@ static int bmp_decode_frame(AVCodecContext *avctx,
> break;
> case 16:
> if(comp == BMP_RGB)
> - avctx->pix_fmt = PIX_FMT_RGB555;
> + avctx->pix_fmt = PIX_FMT_RGB555LE;
> if(comp == BMP_BITFIELDS)
> - avctx->pix_fmt = rgb[1] == 0x07E0 ? PIX_FMT_RGB565 : PIX_FMT_RGB555;
> + avctx->pix_fmt = rgb[1] == 0x07E0 ? PIX_FMT_RGB565LE : PIX_FMT_RGB555LE;
> break;
> case 8:
> if(hsize - ihsize - 14 > 0)
As Michael said, this is on hold.
> @@ -262,31 +262,17 @@ static int bmp_decode_frame(AVCodecContext *avctx,
> }
> break;
> case 8:
> - for(i = 0; i < avctx->height; i++){
> - memcpy(ptr, buf, avctx->width);
> - buf += n;
> - ptr += linesize;
> - }
> - break;
> - case 24:
> - for(i = 0; i < avctx->height; i++){
> - memcpy(ptr, buf, avctx->width*(depth>>3));
> - buf += n;
> - ptr += linesize;
> - }
> - break;
> case 16:
> + case 24:
> + {
> + int in_linesize = avctx->width * (depth >> 3);
> for(i = 0; i < avctx->height; i++){
> - const uint16_t *src = (const uint16_t *) buf;
> - uint16_t *dst = (uint16_t *) ptr;
> -
> - for(j = 0; j < avctx->width; j++)
> - *dst++ = le2me_16(*src++);
> -
> + memcpy(ptr, buf, in_linesize);
> buf += n;
> ptr += linesize;
> }
> break;
> + }
> case 32:
> for(i = 0; i < avctx->height; i++){
> const uint8_t *src = buf;
I think I'll merge 8 and 24 cases first.
More information about the ffmpeg-devel
mailing list