Signed-off-by: Paul B Mahol <onemda@gmail.com> Signed-off-by: Justin Ruggles <justin.ruggles@gmail.com>tags/n0.11
| @@ -12,6 +12,7 @@ version <next>: | |||||
| - remove libpostproc | - remove libpostproc | ||||
| - ID3v2 attached pictures reading and writing | - ID3v2 attached pictures reading and writing | ||||
| - WMA Lossless decoder | - WMA Lossless decoder | ||||
| - XBM encoder | |||||
| version 0.8: | version 0.8: | ||||
| @@ -381,6 +381,8 @@ following image formats are supported: | |||||
| @tab YUV, JPEG and some extension is not supported yet. | @tab YUV, JPEG and some extension is not supported yet. | ||||
| @item Truevision Targa @tab X @tab X | @item Truevision Targa @tab X @tab X | ||||
| @tab Targa (.TGA) image format | @tab Targa (.TGA) image format | ||||
| @item XBM @tab X @tab | |||||
| @tab X BitMap image format | |||||
| @item XWD @tab X @tab X | @item XWD @tab X @tab X | ||||
| @tab X Window Dump image format | @tab X Window Dump image format | ||||
| @end multitable | @end multitable | ||||
| @@ -440,6 +440,7 @@ OBJS-$(CONFIG_WS_SND1_DECODER) += ws-snd1.o | |||||
| OBJS-$(CONFIG_XAN_DPCM_DECODER) += dpcm.o | OBJS-$(CONFIG_XAN_DPCM_DECODER) += dpcm.o | ||||
| OBJS-$(CONFIG_XAN_WC3_DECODER) += xan.o | OBJS-$(CONFIG_XAN_WC3_DECODER) += xan.o | ||||
| OBJS-$(CONFIG_XAN_WC4_DECODER) += xxan.o | OBJS-$(CONFIG_XAN_WC4_DECODER) += xxan.o | ||||
| OBJS-$(CONFIG_XBM_ENCODER) += xbmenc.o | |||||
| OBJS-$(CONFIG_XL_DECODER) += xl.o | OBJS-$(CONFIG_XL_DECODER) += xl.o | ||||
| OBJS-$(CONFIG_XSUB_DECODER) += xsubdec.o | OBJS-$(CONFIG_XSUB_DECODER) += xsubdec.o | ||||
| OBJS-$(CONFIG_XSUB_ENCODER) += xsubenc.o | OBJS-$(CONFIG_XSUB_ENCODER) += xsubenc.o | ||||
| @@ -230,6 +230,7 @@ void avcodec_register_all(void) | |||||
| REGISTER_DECODER (WNV1, wnv1); | REGISTER_DECODER (WNV1, wnv1); | ||||
| REGISTER_DECODER (XAN_WC3, xan_wc3); | REGISTER_DECODER (XAN_WC3, xan_wc3); | ||||
| REGISTER_DECODER (XAN_WC4, xan_wc4); | REGISTER_DECODER (XAN_WC4, xan_wc4); | ||||
| REGISTER_ENCODER (XBM, xbm); | |||||
| REGISTER_DECODER (XL, xl); | REGISTER_DECODER (XL, xl); | ||||
| REGISTER_ENCDEC (XWD, xwd); | REGISTER_ENCDEC (XWD, xwd); | ||||
| REGISTER_DECODER (YOP, yop); | REGISTER_DECODER (YOP, yop); | ||||
| @@ -245,6 +245,7 @@ enum CodecID { | |||||
| CODEC_ID_V410, | CODEC_ID_V410, | ||||
| CODEC_ID_XWD, | CODEC_ID_XWD, | ||||
| CODEC_ID_CDXL, | CODEC_ID_CDXL, | ||||
| CODEC_ID_XBM, | |||||
| /* various PCM "codecs" */ | /* various PCM "codecs" */ | ||||
| CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs | CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs | ||||
| @@ -21,7 +21,7 @@ | |||||
| #define AVCODEC_VERSION_H | #define AVCODEC_VERSION_H | ||||
| #define LIBAVCODEC_VERSION_MAJOR 54 | #define LIBAVCODEC_VERSION_MAJOR 54 | ||||
| #define LIBAVCODEC_VERSION_MINOR 8 | |||||
| #define LIBAVCODEC_VERSION_MINOR 9 | |||||
| #define LIBAVCODEC_VERSION_MICRO 0 | #define LIBAVCODEC_VERSION_MICRO 0 | ||||
| #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | ||||
| @@ -0,0 +1,86 @@ | |||||
| /* | |||||
| * XBM image format | |||||
| * | |||||
| * Copyright (c) 2012 Paul B Mahol | |||||
| * | |||||
| * This file is part of Libav. | |||||
| * | |||||
| * Libav is free software; you can redistribute it and/or | |||||
| * modify it under the terms of the GNU Lesser General Public | |||||
| * License as published by the Free Software Foundation; either | |||||
| * version 2.1 of the License, or (at your option) any later version. | |||||
| * | |||||
| * Libav is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||||
| * Lesser General Public License for more details. | |||||
| * | |||||
| * You should have received a copy of the GNU Lesser General Public | |||||
| * License along with Libav; if not, write to the Free Software | |||||
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |||||
| */ | |||||
| #include "avcodec.h" | |||||
| #include "internal.h" | |||||
| static av_cold int xbm_encode_init(AVCodecContext *avctx) | |||||
| { | |||||
| avctx->coded_frame = avcodec_alloc_frame(); | |||||
| if (!avctx->coded_frame) | |||||
| return AVERROR(ENOMEM); | |||||
| avctx->coded_frame->pict_type = AV_PICTURE_TYPE_I; | |||||
| return 0; | |||||
| } | |||||
| static int xbm_encode_frame(AVCodecContext *avctx, AVPacket *pkt, | |||||
| const AVFrame *p, int *got_packet) | |||||
| { | |||||
| int i, j, ret, size, linesize; | |||||
| uint8_t *ptr, *buf; | |||||
| linesize = (avctx->width + 7) / 8; | |||||
| size = avctx->height * (linesize * 7 + 2) + 110; | |||||
| if ((ret = ff_alloc_packet(pkt, size)) < 0) { | |||||
| av_log(avctx, AV_LOG_ERROR, "Error getting output packet.\n"); | |||||
| return ret; | |||||
| } | |||||
| buf = pkt->data; | |||||
| ptr = p->data[0]; | |||||
| buf += snprintf(buf, 32, "#define image_width %u\n", avctx->width); | |||||
| buf += snprintf(buf, 33, "#define image_height %u\n", avctx->height); | |||||
| buf += snprintf(buf, 40, "static unsigned char image_bits[] = {\n"); | |||||
| for (i = 0; i < avctx->height; i++) { | |||||
| for (j = 0; j < linesize; j++) | |||||
| buf += snprintf(buf, 7, " 0x%02X,", av_reverse[*ptr++]); | |||||
| ptr += p->linesize[0] - linesize; | |||||
| buf += snprintf(buf, 2, "\n"); | |||||
| } | |||||
| buf += snprintf(buf, 5, " };\n"); | |||||
| pkt->size = buf - pkt->data; | |||||
| pkt->flags |= AV_PKT_FLAG_KEY; | |||||
| *got_packet = 1; | |||||
| return 0; | |||||
| } | |||||
| static av_cold int xbm_encode_close(AVCodecContext *avctx) | |||||
| { | |||||
| av_freep(&avctx->coded_frame); | |||||
| return 0; | |||||
| } | |||||
| AVCodec ff_xbm_encoder = { | |||||
| .name = "xbm", | |||||
| .type = AVMEDIA_TYPE_VIDEO, | |||||
| .id = CODEC_ID_XBM, | |||||
| .init = xbm_encode_init, | |||||
| .encode2 = xbm_encode_frame, | |||||
| .close = xbm_encode_close, | |||||
| .pix_fmts = (const enum PixelFormat[]) { PIX_FMT_MONOWHITE, | |||||
| PIX_FMT_NONE }, | |||||
| .long_name = NULL_IF_CONFIG_SMALL("XBM (X BitMap) image"), | |||||
| }; | |||||
| @@ -64,6 +64,7 @@ static const IdStrMap img_tags[] = { | |||||
| { CODEC_ID_JPEG2000 , "jpc"}, | { CODEC_ID_JPEG2000 , "jpc"}, | ||||
| { CODEC_ID_DPX , "dpx"}, | { CODEC_ID_DPX , "dpx"}, | ||||
| { CODEC_ID_PICTOR , "pic"}, | { CODEC_ID_PICTOR , "pic"}, | ||||
| { CODEC_ID_XBM , "xbm"}, | |||||
| { CODEC_ID_XWD , "xwd"}, | { CODEC_ID_XWD , "xwd"}, | ||||
| { CODEC_ID_NONE , NULL} | { CODEC_ID_NONE , NULL} | ||||
| }; | }; | ||||
| @@ -130,7 +130,7 @@ AVOutputFormat ff_image2_muxer = { | |||||
| .long_name = NULL_IF_CONFIG_SMALL("image2 sequence"), | .long_name = NULL_IF_CONFIG_SMALL("image2 sequence"), | ||||
| .extensions = "bmp,dpx,jpeg,jpg,ljpg,pam,pbm,pcx,pgm,pgmyuv,png," | .extensions = "bmp,dpx,jpeg,jpg,ljpg,pam,pbm,pcx,pgm,pgmyuv,png," | ||||
| "ppm,sgi,tga,tif,tiff,jp2,xwd,sun,ras,rs,im1,im8,im24," | "ppm,sgi,tga,tif,tiff,jp2,xwd,sun,ras,rs,im1,im8,im24," | ||||
| "sunras", | |||||
| "sunras,xbm", | |||||
| .priv_data_size = sizeof(VideoMuxData), | .priv_data_size = sizeof(VideoMuxData), | ||||
| .video_codec = CODEC_ID_MJPEG, | .video_codec = CODEC_ID_MJPEG, | ||||
| .write_header = write_header, | .write_header = write_header, | ||||