diff --git a/libavcodec/dpx.c b/libavcodec/dpx.c index e956f6dd10..4b997e421f 100644 --- a/libavcodec/dpx.c +++ b/libavcodec/dpx.c @@ -149,6 +149,9 @@ static int decode_frame(AVCodecContext *avctx, avctx->sample_aspect_ratio = (AVRational){ 0, 1 }; switch (descriptor) { + case 6: // Y + elements = 1; + break; case 51: // RGBA elements = 4; break; @@ -191,6 +194,10 @@ static int decode_frame(AVCodecContext *avctx, } switch (1000 * descriptor + 10 * bits_per_color + endian) { + case 6081: + case 6080: + avctx->pix_fmt = AV_PIX_FMT_GRAY8; + break; case 50081: case 50080: avctx->pix_fmt = AV_PIX_FMT_RGB24; @@ -211,6 +218,12 @@ static int decode_frame(AVCodecContext *avctx, case 51121: avctx->pix_fmt = AV_PIX_FMT_GBRP12; break; + case 6161: + avctx->pix_fmt = AV_PIX_FMT_GRAY16BE; + break; + case 6160: + avctx->pix_fmt = AV_PIX_FMT_GRAY16LE; + break; case 50161: avctx->pix_fmt = AV_PIX_FMT_RGB48BE; break; diff --git a/libavcodec/dpxenc.c b/libavcodec/dpxenc.c index 997e3d651c..875862d9af 100644 --- a/libavcodec/dpxenc.c +++ b/libavcodec/dpxenc.c @@ -43,6 +43,11 @@ static av_cold int encode_init(AVCodecContext *avctx) s->planar = !!(desc->flags & AV_PIX_FMT_FLAG_PLANAR); switch (avctx->pix_fmt) { + case AV_PIX_FMT_GRAY16BE: + case AV_PIX_FMT_GRAY16LE: + case AV_PIX_FMT_GRAY8: + s->descriptor = 6; + break; case AV_PIX_FMT_GBRP10BE: case AV_PIX_FMT_GBRP10LE: case AV_PIX_FMT_GBRP12BE: @@ -242,7 +247,9 @@ AVCodec ff_dpx_encoder = { .init = encode_init, .encode2 = encode_frame, .pix_fmts = (const enum AVPixelFormat[]){ + AV_PIX_FMT_GRAY8, AV_PIX_FMT_RGB24, AV_PIX_FMT_RGBA, + AV_PIX_FMT_GRAY16LE, AV_PIX_FMT_GRAY16BE, AV_PIX_FMT_RGB48LE, AV_PIX_FMT_RGB48BE, AV_PIX_FMT_RGBA64LE, AV_PIX_FMT_RGBA64BE, AV_PIX_FMT_GBRP10LE, AV_PIX_FMT_GBRP10BE,