When input had 12 bits, it was invariably treated as packed RGB with 12 bits per component. --- libavcodec/dpxenc.c | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-)
diff --git a/libavcodec/dpxenc.c b/libavcodec/dpxenc.c index aca745b..d02684b 100644 --- a/libavcodec/dpxenc.c +++ b/libavcodec/dpxenc.c @@ -138,6 +138,38 @@ static void encode_gbrp10(AVCodecContext *avctx, const AVPicture *pic, uint8_t * } } +static void encode_rgb48_Nbits(AVCodecContext *avctx, const AVPicture *pic, + uint16_t *dst) +{ + DPXContext *s = avctx->priv_data; + const uint16_t *src = (uint16_t *)pic->data[0]; + int stride = pic->linesize[0]/2; + int x, y, i, pad, shift = 16 - avctx->bits_per_raw_sample; + + pad = avctx->width*6; + pad = (FFALIGN(pad, 4) - pad) >> 1; + for (y = 0; y < avctx->height; y++) { + for (x = 0; x < avctx->width; x++) { + uint16_t value[3]; + // Input is RGB, encode as BGR + if (s->big_endian) { + value[0] = AV_RB16(src + 3*x+0) << shift; + value[1] = AV_RB16(src + 3*x+1) << shift; + value[2] = AV_RB16(src + 3*x+2) << shift; + } else { + value[0] = AV_RL16(src + 3*x+0) << shift; + value[1] = AV_RL16(src + 3*x+1) << shift; + value[2] = AV_RL16(src + 3*x+2) << shift; + } + for (i = 0; i < 3; i++) + write16(dst++, value[i]); + } + for (i = 0; i < pad; i++) + *dst++ = 0; + src += stride; + } +} + static void encode_gbrp12(AVCodecContext *avctx, const AVPicture *pic, uint16_t *dst) { DPXContext *s = avctx->priv_data; @@ -254,7 +286,10 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, encode_rgb48_10bit(avctx, (const AVPicture*)frame, buf + HEADER_SIZE); break; case 12: - encode_gbrp12(avctx, (const AVPicture*)frame, (uint16_t*)(buf + HEADER_SIZE)); + if (s->planar) + encode_gbrp12(avctx, (const AVPicture*)frame, (uint16_t*)(buf + HEADER_SIZE)); + else + encode_rgb48_Nbits(avctx, (const AVPicture*)frame, (uint16_t*)(buf + HEADER_SIZE)); break; default: av_log(avctx, AV_LOG_ERROR, "Unsupported bit depth: %d\n", s->bits_per_component); -- 1.9.2.msysgit.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel