diff --git a/libavcodec/dpxenc.c b/libavcodec/dpxenc.c index b5f7c19191..305393f66f 100644 --- a/libavcodec/dpxenc.c +++ b/libavcodec/dpxenc.c @@ -35,40 +35,27 @@ typedef struct DPXContext { static av_cold int encode_init(AVCodecContext *avctx) { DPXContext *s = avctx->priv_data; + const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(avctx->pix_fmt); - s->big_endian = 1; - s->bits_per_component = 8; - s->descriptor = 50; /* RGB */ - s->planar = 0; + s->big_endian = !!(desc->flags & PIX_FMT_BE); + s->bits_per_component = desc->comp[0].depth_minus1 + 1; + s->descriptor = (desc->flags & PIX_FMT_ALPHA) ? 51 : 50; + s->planar = !!(desc->flags & PIX_FMT_PLANAR); switch (avctx->pix_fmt) { + case AV_PIX_FMT_GBRP10BE: + case AV_PIX_FMT_GBRP10LE: + case AV_PIX_FMT_GBRP12BE: + case AV_PIX_FMT_GBRP12LE: case AV_PIX_FMT_RGB24: - break; + case AV_PIX_FMT_RGBA64BE: + case AV_PIX_FMT_RGBA64LE: case AV_PIX_FMT_RGBA: - s->descriptor = 51; /* RGBA */ break; case AV_PIX_FMT_RGB48LE: - s->big_endian = 0; case AV_PIX_FMT_RGB48BE: - s->bits_per_component = avctx->bits_per_raw_sample ? avctx->bits_per_raw_sample : 16; - break; - case AV_PIX_FMT_RGBA64LE: - s->big_endian = 0; - case AV_PIX_FMT_RGBA64BE: - s->descriptor = 51; - s->bits_per_component = 16; - break; - case AV_PIX_FMT_GBRP10LE: - s->big_endian = 0; - case AV_PIX_FMT_GBRP10BE: - s->bits_per_component = 10; - s->planar = 1; - break; - case AV_PIX_FMT_GBRP12LE: - s->big_endian = 0; - case AV_PIX_FMT_GBRP12BE: - s->bits_per_component = 12; - s->planar = 1; + if (avctx->bits_per_raw_sample) + s->bits_per_component = avctx->bits_per_raw_sample; break; default: av_log(avctx, AV_LOG_INFO, "unsupported pixel format\n"); diff --git a/tests/ref/lavf/dpx b/tests/ref/lavf/dpx index 0206bd7d02..c4cd9f953b 100644 --- a/tests/ref/lavf/dpx +++ b/tests/ref/lavf/dpx @@ -1,4 +1,4 @@ -d2f0b4e854fda2d3b3bee84cef80593c *./tests/data/images/dpx/02.dpx +4c8880d5835ffb5fe37c1ed8c8d404de *./tests/data/images/dpx/02.dpx ./tests/data/images/dpx/%02d.dpx CRC=0x6da01946 305792 ./tests/data/images/dpx/02.dpx 075963c3c08978b6a20555ba09161434 *./tests/data/images/dpx/02.dpx