[FFmpeg-devel] [PATCH]Support gray16 encoding with libopenjpeg

Carl Eugen Hoyos cehoyos at ag.or.at
Fri Jan 13 17:37:43 CET 2012


Hi!

jasper and OSX "Preview" 4.2 (the application) support Gray16, OSX's Desktop 
preview shows the resulting files red (on 10.5).

(I will break the long line if the patch is ok.)

Please comment, Carl Eugen
-------------- next part --------------
diff --git a/libavcodec/libopenjpegenc.c b/libavcodec/libopenjpegenc.c
index c07eccd..5e9c061 100644
--- a/libavcodec/libopenjpegenc.c
+++ b/libavcodec/libopenjpegenc.c
@@ -69,6 +69,11 @@ static opj_image_t *mj2_create_image(AVCodecContext *avctx, opj_cparameters_t *p
         color_space = CLRSPC_GRAY;
         numcomps = 1;
         break;
+    case PIX_FMT_GRAY16:
+        color_space = CLRSPC_GRAY;
+        numcomps = 1;
+        bpp = 16;
+        break;
     case PIX_FMT_RGB24:
         color_space = CLRSPC_SRGB;
         numcomps = 3;
@@ -219,7 +229,7 @@ static int libopenjpeg_copy_rgb16(AVCodecContext *avctx, AVFrame *frame, opj_ima
     int y;
     uint16_t *frame_ptr = (uint16_t*)frame->data[0];
 
-    av_assert0(numcomps == 3);
+    av_assert0(numcomps == 1 || numcomps == 3);
 
     for (compno = 0; compno < numcomps; ++compno) {
         if (image->comps[compno].w > frame->linesize[0] / numcomps) {
@@ -317,6 +327,9 @@ static int libopenjpeg_encode_frame(AVCodecContext *avctx, uint8_t *buf, int buf
     case PIX_FMT_GRAY8:
         cpyresult = libopenjpeg_copy_rgba(avctx, frame, image, 1);
         break;
+    case PIX_FMT_GRAY16:
+        cpyresult = libopenjpeg_copy_rgb16(avctx, frame, image, 1);
+        break;
     case PIX_FMT_RGB24:
         cpyresult = libopenjpeg_copy_rgba(avctx, frame, image, 3);
         break;
@@ -400,7 +416,7 @@ AVCodec ff_libopenjpeg_encoder = {
     .encode         = libopenjpeg_encode_frame,
     .close          = libopenjpeg_encode_close,
     .capabilities   = 0,
-    .pix_fmts = (const enum PixelFormat[]){PIX_FMT_RGB24,PIX_FMT_RGBA,PIX_FMT_RGB48,PIX_FMT_GRAY8,
+    .pix_fmts = (const enum PixelFormat[]){PIX_FMT_RGB24,PIX_FMT_RGBA,PIX_FMT_RGB48,PIX_FMT_GRAY8,PIX_FMT_GRAY16,
                                            PIX_FMT_YUV420P,PIX_FMT_YUV422P,PIX_FMT_YUVA420P,
                                            PIX_FMT_YUV440P,PIX_FMT_YUV444P,
                                            PIX_FMT_YUV420P9,PIX_FMT_YUV422P9,PIX_FMT_YUV444P9,


More information about the ffmpeg-devel mailing list