]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/dpxenc.c
v210: Add avx2 version of the 10-bit line encoder
[ffmpeg] / libavcodec / dpxenc.c
index d2631615a1891d144cd5cf89c20bc88319b7ac57..adcb52944528e5a066f998eeb9e8ee8a009c12ca 100644 (file)
@@ -26,7 +26,6 @@
 #include "internal.h"
 
 typedef struct DPXContext {
-    AVFrame picture;
     int big_endian;
     int bits_per_component;
     int descriptor;
@@ -36,9 +35,12 @@ static av_cold int encode_init(AVCodecContext *avctx)
 {
     DPXContext *s = avctx->priv_data;
 
-    avctx->coded_frame = &s->picture;
+#if FF_API_CODED_FRAME
+FF_DISABLE_DEPRECATION_WARNINGS
     avctx->coded_frame->pict_type = AV_PICTURE_TYPE_I;
     avctx->coded_frame->key_frame = 1;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
 
     s->big_endian         = 1;
     s->bits_per_component = 8;
@@ -52,6 +54,7 @@ static av_cold int encode_init(AVCodecContext *avctx)
         break;
     case AV_PIX_FMT_RGB48LE:
         s->big_endian = 0;
+        /* fall-through */
     case AV_PIX_FMT_RGB48BE:
         s->bits_per_component = avctx->bits_per_raw_sample ? avctx->bits_per_raw_sample : 16;
         break;
@@ -75,7 +78,7 @@ do { \
     else               AV_WL32(p, value); \
 } while(0)
 
-static void encode_rgb48_10bit(AVCodecContext *avctx, const AVPicture *pic,
+static void encode_rgb48_10bit(AVCodecContext *avctx, const AVFrame *pic,
                                uint8_t *dst)
 {
     DPXContext *s = avctx->priv_data;
@@ -112,7 +115,8 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
     if (s->bits_per_component == 10)
         size = avctx->height * avctx->width * 4;
     else
-        size = avpicture_get_size(avctx->pix_fmt, avctx->width, avctx->height);
+        size = av_image_get_buffer_size(avctx->pix_fmt,
+                                        avctx->width, avctx->height, 1);
     if ((ret = ff_alloc_packet(pkt, size + HEADER_SIZE)) < 0) {
         av_log(avctx, AV_LOG_ERROR, "Error getting output packet.\n");
         return ret;
@@ -127,7 +131,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
     memcpy (buf +   8, "V1.0", 4);
     write32(buf +  20, 1); /* new image */
     write32(buf +  24, HEADER_SIZE);
-    if (!(avctx->flags & CODEC_FLAG_BITEXACT))
+    if (!(avctx->flags & AV_CODEC_FLAG_BITEXACT))
         memcpy (buf + 160, LIBAVCODEC_IDENT, FFMIN(sizeof(LIBAVCODEC_IDENT), 100));
     write32(buf + 660, 0xFFFFFFFF); /* unencrypted */
 
@@ -141,6 +145,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
     buf[802] = 2; /* linear colorimetric */
     buf[803] = s->bits_per_component;
     write16(buf + 804, s->bits_per_component == 10 ? 1 : 0); /* packing method */
+    write32(buf + 808, HEADER_SIZE); /* data offset */
 
     /* Image source information header */
     write32(buf + 1628, avctx->sample_aspect_ratio.num);
@@ -149,14 +154,16 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
     switch (s->bits_per_component) {
     case 8:
     case 16:
-        size = avpicture_layout((const AVPicture*)frame, avctx->pix_fmt,
-                                avctx->width, avctx->height,
-                                buf + HEADER_SIZE, pkt->size - HEADER_SIZE);
+        size = av_image_copy_to_buffer(buf + HEADER_SIZE,
+                                       pkt->size - HEADER_SIZE,
+                                       frame->data, frame->linesize,
+                                       avctx->pix_fmt,
+                                       avctx->width, avctx->height, 1);
         if (size < 0)
             return size;
         break;
     case 10:
-        encode_rgb48_10bit(avctx, (const AVPicture*)frame, buf + HEADER_SIZE);
+        encode_rgb48_10bit(avctx, frame, buf + HEADER_SIZE);
         break;
     default:
         av_log(avctx, AV_LOG_ERROR, "Unsupported bit depth: %d\n", s->bits_per_component);
@@ -175,6 +182,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
 
 AVCodec ff_dpx_encoder = {
     .name = "dpx",
+    .long_name = NULL_IF_CONFIG_SMALL("DPX image"),
     .type = AVMEDIA_TYPE_VIDEO,
     .id   = AV_CODEC_ID_DPX,
     .priv_data_size = sizeof(DPXContext),
@@ -186,5 +194,4 @@ AVCodec ff_dpx_encoder = {
         AV_PIX_FMT_RGB48LE,
         AV_PIX_FMT_RGB48BE,
         AV_PIX_FMT_NONE},
-    .long_name = NULL_IF_CONFIG_SMALL("DPX image"),
 };