summaryrefslogtreecommitdiff
path: root/libavcodec/dpx.c
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2013-10-07 11:20:13 +0000
committerPaul B Mahol <onemda@gmail.com>2013-10-07 11:45:46 +0000
commite745dc2d6f3bae21cd471a3dcfa0ffe700f39c6e (patch)
treec8724dedc051e93f8f8d8dab81a5e39580632fd5 /libavcodec/dpx.c
parentb8866783c6a855643a3869020ac5241b12f7d97a (diff)
avcodec/dpx: refactor pixel format selection
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Diffstat (limited to 'libavcodec/dpx.c')
-rw-r--r--libavcodec/dpx.c50
1 files changed, 38 insertions, 12 deletions
diff --git a/libavcodec/dpx.c b/libavcodec/dpx.c
index 1cfc258577..e956f6dd10 100644
--- a/libavcodec/dpx.c
+++ b/libavcodec/dpx.c
@@ -162,11 +162,6 @@ static int decode_frame(AVCodecContext *avctx,
switch (bits_per_color) {
case 8:
- if (elements == 4) {
- avctx->pix_fmt = AV_PIX_FMT_RGBA;
- } else {
- avctx->pix_fmt = AV_PIX_FMT_RGB24;
- }
total_size = avctx->width * avctx->height * elements;
break;
case 10:
@@ -174,7 +169,6 @@ static int decode_frame(AVCodecContext *avctx,
av_log(avctx, AV_LOG_ERROR, "Packing to 32bit required\n");
return -1;
}
- avctx->pix_fmt = AV_PIX_FMT_GBRP10;
total_size = (avctx->width * elements + 2) / 3 * 4 * avctx->height;
break;
case 12:
@@ -182,15 +176,9 @@ static int decode_frame(AVCodecContext *avctx,
av_log(avctx, AV_LOG_ERROR, "Packing to 16bit required\n");
return -1;
}
- avctx->pix_fmt = AV_PIX_FMT_GBRP12;
total_size = 2 * avctx->width * avctx->height * elements;
break;
case 16:
- if (endian) {
- avctx->pix_fmt = elements == 4 ? AV_PIX_FMT_RGBA64BE : AV_PIX_FMT_RGB48BE;
- } else {
- avctx->pix_fmt = elements == 4 ? AV_PIX_FMT_RGBA64LE : AV_PIX_FMT_RGB48LE;
- }
total_size = 2 * avctx->width * avctx->height * elements;
break;
case 1:
@@ -202,6 +190,44 @@ static int decode_frame(AVCodecContext *avctx,
return AVERROR_INVALIDDATA;
}
+ switch (1000 * descriptor + 10 * bits_per_color + endian) {
+ case 50081:
+ case 50080:
+ avctx->pix_fmt = AV_PIX_FMT_RGB24;
+ break;
+ case 51081:
+ case 51080:
+ avctx->pix_fmt = AV_PIX_FMT_RGBA;
+ break;
+ case 50100:
+ case 51100:
+ case 50101:
+ case 51101:
+ avctx->pix_fmt = AV_PIX_FMT_GBRP10;
+ break;
+ case 50120:
+ case 51120:
+ case 50121:
+ case 51121:
+ avctx->pix_fmt = AV_PIX_FMT_GBRP12;
+ break;
+ case 50161:
+ avctx->pix_fmt = AV_PIX_FMT_RGB48BE;
+ break;
+ case 50160:
+ avctx->pix_fmt = AV_PIX_FMT_RGB48LE;
+ break;
+ case 51161:
+ avctx->pix_fmt = AV_PIX_FMT_RGBA64BE;
+ break;
+ case 51160:
+ avctx->pix_fmt = AV_PIX_FMT_RGBA64LE;
+ break;
+ default:
+ av_log(avctx, AV_LOG_ERROR, "Unsupported format\n");
+ return AVERROR_PATCHWELCOME;
+ }
+
if ((ret = ff_get_buffer(avctx, p, 0)) < 0)
return ret;