]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/libschroedingerenc.c
jvdec: don't use deprecated CODEC_TYPE_*/PKT_FLAG_KEY
[ffmpeg] / libavcodec / libschroedingerenc.c
index 2345e09667eec2ad60a554ff3cf0e949140d08db..d7190d06a490fd16e7d137dc2328845980d2fe78 100644 (file)
@@ -2,20 +2,20 @@
  * Dirac encoder support via Schroedinger libraries
  * Copyright (c) 2008 BBC, Anuradha Suraparaju <asuraparaju at gmail dot com >
  *
- * This file is part of FFmpeg.
+ * This file is part of Libav.
  *
- * FFmpeg is free software; you can redistribute it and/or
+ * Libav is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
  *
- * FFmpeg is distributed in the hope that it will be useful,
+ * Libav is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
+ * License along with Libav; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
@@ -37,6 +37,7 @@
 #include "avcodec.h"
 #include "libdirac_libschro.h"
 #include "libschroedinger.h"
+#include "bytestream.h"
 
 
 /** libschroedinger encoder private data */
@@ -127,6 +128,24 @@ static int libschroedinger_encode_init(AVCodecContext *avccontext)
     if (SetSchroChromaFormat(avccontext) == -1)
         return -1;
 
+    if (avccontext->color_primaries == AVCOL_PRI_BT709) {
+        p_schro_params->format->colour_primaries = SCHRO_COLOUR_PRIMARY_HDTV;
+    } else if (avccontext->color_primaries == AVCOL_PRI_BT470BG) {
+        p_schro_params->format->colour_primaries = SCHRO_COLOUR_PRIMARY_SDTV_625;
+    } else if (avccontext->color_primaries == AVCOL_PRI_SMPTE170M) {
+        p_schro_params->format->colour_primaries = SCHRO_COLOUR_PRIMARY_SDTV_525;
+    }
+
+    if (avccontext->colorspace == AVCOL_SPC_BT709) {
+        p_schro_params->format->colour_matrix = SCHRO_COLOUR_MATRIX_HDTV;
+    } else if (avccontext->colorspace == AVCOL_SPC_BT470BG) {
+        p_schro_params->format->colour_matrix = SCHRO_COLOUR_MATRIX_SDTV;
+    }
+
+    if (avccontext->color_trc == AVCOL_TRC_BT709) {
+        p_schro_params->format->transfer_function = SCHRO_TRANSFER_CHAR_TV_GAMMA;
+    }
+
     if (ff_get_schro_frame_format(p_schro_params->format->chroma_format,
                                   &p_schro_params->frame_format) == -1) {
         av_log(avccontext, AV_LOG_ERROR,
@@ -153,6 +172,8 @@ static int libschroedinger_encode_init(AVCodecContext *avccontext)
             schro_encoder_setting_set_double(p_schro_params->encoder,
                                              "enable_noarith", 1);
     } else {
+        schro_encoder_setting_set_double(p_schro_params->encoder,
+                                         "au_distance", avccontext->gop_size);
         avccontext->has_b_frames = 1;
     }
 
@@ -192,6 +213,9 @@ static int libschroedinger_encode_init(AVCodecContext *avccontext)
         schro_encoder_setting_set_double(p_schro_params->encoder,
                                          "interlaced_coding", 1);
 
+    schro_encoder_setting_set_double(p_schro_params->encoder, "open_gop",
+                                     !(avccontext->flags & CODEC_FLAG_CLOSED_GOP));
+
     /* FIXME: Signal range hardcoded to 8-bit data until both libschroedinger
      * and libdirac support other bit-depth data. */
     schro_video_format_set_std_signal_range(p_schro_params->format,
@@ -314,10 +338,7 @@ static int libschroedinger_encode_frame(AVCodecContext *avccontext,
 
             /* Parse the coded frame number from the bitstream. Bytes 14
              * through 17 represesent the frame number. */
-                p_frame_output->frame_num = (enc_buf->data[13] << 24) +
-                                            (enc_buf->data[14] << 16) +
-                                            (enc_buf->data[15] <<  8) +
-                                             enc_buf->data[16];
+            p_frame_output->frame_num = AV_RB32(enc_buf->data + 13);
 
             ff_dirac_schro_queue_push_back(&p_schro_params->enc_frame_queue,
                                            p_frame_output);
@@ -401,7 +422,7 @@ static int libschroedinger_encode_close(AVCodecContext *avccontext)
 }
 
 
-AVCodec libschroedinger_encoder = {
+AVCodec ff_libschroedinger_encoder = {
     "libschroedinger",
     AVMEDIA_TYPE_VIDEO,
     CODEC_ID_DIRAC,