|  | @@ -71,6 +71,7 @@ | 
														
													
														
															
																|  |  | #include "libavutil/common.h" |  |  | #include "libavutil/common.h" | 
														
													
														
															
																|  |  | #include "libavutil/pixdesc.h" |  |  | #include "libavutil/pixdesc.h" | 
														
													
														
															
																|  |  | #include "libavutil/opt.h" |  |  | #include "libavutil/opt.h" | 
														
													
														
															
																|  |  |  |  |  | #include "libavutil/intreadwrite.h" | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | #define NMSEDEC_BITS 7 |  |  | #define NMSEDEC_BITS 7 | 
														
													
														
															
																|  |  | #define NMSEDEC_FRACBITS (NMSEDEC_BITS-1) |  |  | #define NMSEDEC_FRACBITS (NMSEDEC_BITS-1) | 
														
													
												
													
														
															
																|  | @@ -1054,14 +1055,38 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, | 
														
													
														
															
																|  |  | bytestream_put_byte(&s->buf, 1); |  |  | bytestream_put_byte(&s->buf, 1); | 
														
													
														
															
																|  |  | bytestream_put_byte(&s->buf, 0); |  |  | bytestream_put_byte(&s->buf, 0); | 
														
													
														
															
																|  |  | bytestream_put_byte(&s->buf, 0); |  |  | bytestream_put_byte(&s->buf, 0); | 
														
													
														
															
																|  |  | if (s->ncomponents == 1) { |  |  |  | 
														
													
														
															
																|  |  | bytestream_put_be32(&s->buf, 17); |  |  |  | 
														
													
														
															
																|  |  | } else if (avctx->pix_fmt == AV_PIX_FMT_RGB24) { |  |  |  | 
														
													
														
															
																|  |  |  |  |  | if (avctx->pix_fmt == AV_PIX_FMT_RGB24 || avctx->pix_fmt == AV_PIX_FMT_PAL8) { | 
														
													
														
															
																|  |  | bytestream_put_be32(&s->buf, 16); |  |  | bytestream_put_be32(&s->buf, 16); | 
														
													
														
															
																|  |  |  |  |  | } else if (s->ncomponents == 1) { | 
														
													
														
															
																|  |  |  |  |  | bytestream_put_be32(&s->buf, 17); | 
														
													
														
															
																|  |  | } else { |  |  | } else { | 
														
													
														
															
																|  |  | bytestream_put_be32(&s->buf, 18); |  |  | bytestream_put_be32(&s->buf, 18); | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  | update_size(chunkstart, s->buf); |  |  | update_size(chunkstart, s->buf); | 
														
													
														
															
																|  |  |  |  |  | if (avctx->pix_fmt == AV_PIX_FMT_PAL8) { | 
														
													
														
															
																|  |  |  |  |  | int i; | 
														
													
														
															
																|  |  |  |  |  | uint8_t *palette = pict->data[1]; | 
														
													
														
															
																|  |  |  |  |  | chunkstart = s->buf; | 
														
													
														
															
																|  |  |  |  |  | bytestream_put_be32(&s->buf, 0); | 
														
													
														
															
																|  |  |  |  |  | bytestream_put_buffer(&s->buf, "pclr", 4); | 
														
													
														
															
																|  |  |  |  |  | bytestream_put_be16(&s->buf, AVPALETTE_COUNT); | 
														
													
														
															
																|  |  |  |  |  | bytestream_put_byte(&s->buf, 3); // colour channels | 
														
													
														
															
																|  |  |  |  |  | bytestream_put_be24(&s->buf, 0x070707); //colour depths | 
														
													
														
															
																|  |  |  |  |  | for (i = 0; i < AVPALETTE_COUNT; i++) { | 
														
													
														
															
																|  |  |  |  |  | bytestream_put_be24(&s->buf, HAVE_BIGENDIAN ? AV_RB24(palette + 1) : AV_RL24(palette)); | 
														
													
														
															
																|  |  |  |  |  | palette += 4; | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | update_size(chunkstart, s->buf); | 
														
													
														
															
																|  |  |  |  |  | chunkstart = s->buf; | 
														
													
														
															
																|  |  |  |  |  | bytestream_put_be32(&s->buf, 0); | 
														
													
														
															
																|  |  |  |  |  | bytestream_put_buffer(&s->buf, "cmap", 4); | 
														
													
														
															
																|  |  |  |  |  | for (i = 0; i < 3; i++) { | 
														
													
														
															
																|  |  |  |  |  | bytestream_put_be16(&s->buf, 0); // component | 
														
													
														
															
																|  |  |  |  |  | bytestream_put_byte(&s->buf, 1); // palette mapping | 
														
													
														
															
																|  |  |  |  |  | bytestream_put_byte(&s->buf, i); // index | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | update_size(chunkstart, s->buf); | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  | update_size(jp2hstart, s->buf); |  |  | update_size(jp2hstart, s->buf); | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | jp2cstart = s->buf; |  |  | jp2cstart = s->buf; | 
														
													
												
													
														
															
																|  | @@ -1124,6 +1149,12 @@ FF_DISABLE_DEPRECATION_WARNINGS | 
														
													
														
															
																|  |  | FF_ENABLE_DEPRECATION_WARNINGS |  |  | FF_ENABLE_DEPRECATION_WARNINGS | 
														
													
														
															
																|  |  | #endif |  |  | #endif | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  |  |  |  | if (avctx->pix_fmt == AV_PIX_FMT_PAL8 && (s->pred != FF_DWT97_INT || s->format != CODEC_JP2)) { | 
														
													
														
															
																|  |  |  |  |  | av_log(s->avctx, AV_LOG_WARNING, "Forcing lossless jp2 for pal8\n"); | 
														
													
														
															
																|  |  |  |  |  | s->pred = FF_DWT97_INT; | 
														
													
														
															
																|  |  |  |  |  | s->format = CODEC_JP2; | 
														
													
														
															
																|  |  |  |  |  | } | 
														
													
														
															
																|  |  |  |  |  | 
 | 
														
													
														
															
																|  |  | // defaults: |  |  | // defaults: | 
														
													
														
															
																|  |  | // TODO: implement setting non-standard precinct size |  |  | // TODO: implement setting non-standard precinct size | 
														
													
														
															
																|  |  | memset(codsty->log2_prec_widths , 15, sizeof(codsty->log2_prec_widths )); |  |  | memset(codsty->log2_prec_widths , 15, sizeof(codsty->log2_prec_widths )); | 
														
													
												
													
														
															
																|  | @@ -1154,7 +1185,7 @@ FF_ENABLE_DEPRECATION_WARNINGS | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | if (avctx->pix_fmt == AV_PIX_FMT_RGB24){ |  |  | if (avctx->pix_fmt == AV_PIX_FMT_RGB24){ | 
														
													
														
															
																|  |  | s->ncomponents = 3; |  |  | s->ncomponents = 3; | 
														
													
														
															
																|  |  | } else if (avctx->pix_fmt == AV_PIX_FMT_GRAY8){ |  |  |  | 
														
													
														
															
																|  |  |  |  |  | } else if (avctx->pix_fmt == AV_PIX_FMT_GRAY8 || avctx->pix_fmt == AV_PIX_FMT_PAL8){ | 
														
													
														
															
																|  |  | s->ncomponents = 1; |  |  | s->ncomponents = 1; | 
														
													
														
															
																|  |  | } else{ // planar YUV |  |  | } else{ // planar YUV | 
														
													
														
															
																|  |  | s->planar = 1; |  |  | s->planar = 1; | 
														
													
												
													
														
															
																|  | @@ -1223,6 +1254,7 @@ AVCodec ff_jpeg2000_encoder = { | 
														
													
														
															
																|  |  | AV_PIX_FMT_RGB24, AV_PIX_FMT_YUV444P, AV_PIX_FMT_GRAY8, |  |  | AV_PIX_FMT_RGB24, AV_PIX_FMT_YUV444P, AV_PIX_FMT_GRAY8, | 
														
													
														
															
																|  |  | AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, |  |  | AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, | 
														
													
														
															
																|  |  | AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P, |  |  | AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P, | 
														
													
														
															
																|  |  |  |  |  | AV_PIX_FMT_PAL8, | 
														
													
														
															
																|  |  | AV_PIX_FMT_NONE |  |  | AV_PIX_FMT_NONE | 
														
													
														
															
																|  |  | }, |  |  | }, | 
														
													
														
															
																|  |  | .priv_class     = &j2k_class, |  |  | .priv_class     = &j2k_class, | 
														
													
												
													
														
															
																|  | 
 |