|  |  | @@ -31,11 +31,6 @@ static const uint32_t rgb565_masks[]  = { 0xF800, 0x07E0, 0x001F }; | 
		
	
		
			
			|  |  |  | static const uint32_t rgb444_masks[]  = { 0x0F00, 0x00F0, 0x000F }; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | static av_cold int bmp_encode_init(AVCodecContext *avctx){ | 
		
	
		
			
			|  |  |  | BMPContext *s = avctx->priv_data; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | avcodec_get_frame_defaults(&s->picture); | 
		
	
		
			
			|  |  |  | avctx->coded_frame = &s->picture; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | switch (avctx->pix_fmt) { | 
		
	
		
			
			|  |  |  | case AV_PIX_FMT_BGR24: | 
		
	
		
			
			|  |  |  | avctx->bits_per_coded_sample = 24; | 
		
	
	
		
			
				|  |  | @@ -61,22 +56,25 @@ static av_cold int bmp_encode_init(AVCodecContext *avctx){ | 
		
	
		
			
			|  |  |  | return -1; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | avctx->coded_frame = av_frame_alloc(); | 
		
	
		
			
			|  |  |  | if (!avctx->coded_frame) | 
		
	
		
			
			|  |  |  | return AVERROR(ENOMEM); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | return 0; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | static int bmp_encode_frame(AVCodecContext *avctx, AVPacket *pkt, | 
		
	
		
			
			|  |  |  | const AVFrame *pict, int *got_packet) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | BMPContext *s = avctx->priv_data; | 
		
	
		
			
			|  |  |  | AVFrame * const p = &s->picture; | 
		
	
		
			
			|  |  |  | const AVFrame * const p = pict; | 
		
	
		
			
			|  |  |  | int n_bytes_image, n_bytes_per_row, n_bytes, i, n, hsize, ret; | 
		
	
		
			
			|  |  |  | const uint32_t *pal = NULL; | 
		
	
		
			
			|  |  |  | int pad_bytes_per_row, pal_entries = 0, compression = BMP_RGB; | 
		
	
		
			
			|  |  |  | int bit_count = avctx->bits_per_coded_sample; | 
		
	
		
			
			|  |  |  | uint8_t *ptr, *buf; | 
		
	
		
			
			|  |  |  | *p = *pict; | 
		
	
		
			
			|  |  |  | p->pict_type= AV_PICTURE_TYPE_I; | 
		
	
		
			
			|  |  |  | p->key_frame= 1; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | avctx->coded_frame->pict_type = AV_PICTURE_TYPE_I; | 
		
	
		
			
			|  |  |  | avctx->coded_frame->key_frame = 1; | 
		
	
		
			
			|  |  |  | switch (avctx->pix_fmt) { | 
		
	
		
			
			|  |  |  | case AV_PIX_FMT_RGB444: | 
		
	
		
			
			|  |  |  | compression = BMP_BITFIELDS; | 
		
	
	
		
			
				|  |  | @@ -159,14 +157,20 @@ static int bmp_encode_frame(AVCodecContext *avctx, AVPacket *pkt, | 
		
	
		
			
			|  |  |  | return 0; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | static av_cold int bmp_encode_close(AVCodecContext *avctx) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | av_frame_free(&avctx->coded_frame); | 
		
	
		
			
			|  |  |  | return 0; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | AVCodec ff_bmp_encoder = { | 
		
	
		
			
			|  |  |  | .name           = "bmp", | 
		
	
		
			
			|  |  |  | .long_name      = NULL_IF_CONFIG_SMALL("BMP (Windows and OS/2 bitmap)"), | 
		
	
		
			
			|  |  |  | .type           = AVMEDIA_TYPE_VIDEO, | 
		
	
		
			
			|  |  |  | .id             = AV_CODEC_ID_BMP, | 
		
	
		
			
			|  |  |  | .priv_data_size = sizeof(BMPContext), | 
		
	
		
			
			|  |  |  | .init           = bmp_encode_init, | 
		
	
		
			
			|  |  |  | .encode2        = bmp_encode_frame, | 
		
	
		
			
			|  |  |  | .close          = bmp_encode_close, | 
		
	
		
			
			|  |  |  | .pix_fmts       = (const enum AVPixelFormat[]){ | 
		
	
		
			
			|  |  |  | AV_PIX_FMT_BGR24, | 
		
	
		
			
			|  |  |  | AV_PIX_FMT_RGB555, AV_PIX_FMT_RGB444, AV_PIX_FMT_RGB565, | 
		
	
	
		
			
				|  |  | 
 |