Merge commit 'a86aa16088ad7f22a8918d71adb8c040d6033d84'
authorHendrik Leppkes <h.leppkes@gmail.com>
Sun, 26 Jun 2016 13:44:43 +0000 (15:44 +0200)
committerHendrik Leppkes <h.leppkes@gmail.com>
Sun, 26 Jun 2016 13:44:43 +0000 (15:44 +0200)
* commit 'a86aa16088ad7f22a8918d71adb8c040d6033d84':
  vaapi_h264: Add trivial support for low-power encoding

Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
1  2 
libavcodec/vaapi_encode_h264.c

index b304a6650de73cc2834c614005a71627568fd161,2341b123fc2e3fc68be17010fd75ee1e4aed46da..39e2ec09cd5d024f2ce64dde1307d02a0fd0ccdb
@@@ -1,18 -1,18 +1,18 @@@
  /*
 - * This file is part of Libav.
 + * This file is part of FFmpeg.
   *
 - * Libav is free software; you can redistribute it and/or
 + * FFmpeg 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.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * FFmpeg 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 Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
@@@ -126,6 -126,7 +126,7 @@@ typedef struct VAAPIEncodeH264Context 
  typedef struct VAAPIEncodeH264Options {
      int qp;
      int quality;
+     int low_power;
  } VAAPIEncodeH264Options;
  
  
@@@ -735,12 -736,6 +736,12 @@@ static av_cold int vaapi_encode_h264_in
      int hrd_buffer_size;
      int hrd_initial_buffer_fullness;
  
 +    if (avctx->bit_rate > INT32_MAX) {
 +        av_log(avctx, AV_LOG_ERROR, "Target bitrate of 2^31 bps or "
 +               "higher is not supported.\n");
 +        return AVERROR(EINVAL);
 +    }
 +
      if (avctx->rc_buffer_size)
          hrd_buffer_size = avctx->rc_buffer_size;
      else
      priv->fixed_qp_p   = 26;
      priv->fixed_qp_b   = 26;
  
 -    av_log(avctx, AV_LOG_DEBUG, "Using constant-bitrate = %d bps.\n",
 +    av_log(avctx, AV_LOG_DEBUG, "Using constant-bitrate = %"PRId64" bps.\n",
             avctx->bit_rate);
      return 0;
  }
@@@ -860,7 -855,17 +861,17 @@@ static av_cold int vaapi_encode_h264_in
                 avctx->profile);
          return AVERROR(EINVAL);
      }
-     ctx->va_entrypoint = VAEntrypointEncSlice;
+     if (opt->low_power) {
+ #if VA_CHECK_VERSION(0, 39, 1)
+         ctx->va_entrypoint = VAEntrypointEncSliceLP;
+ #else
+         av_log(avctx, AV_LOG_ERROR, "Low-power encoding is not "
+                "supported with this VAAPI version.\n");
+         return AVERROR(EINVAL);
+ #endif
+     } else {
+         ctx->va_entrypoint = VAEntrypointEncSlice;
+     }
  
      ctx->input_width    = avctx->width;
      ctx->input_height   = avctx->height;
@@@ -943,7 -948,10 +954,10 @@@ static const AVOption vaapi_encode_h264
      { "qp", "Constant QP (for P-frames; scaled by qfactor/qoffset for I/B)",
        OFFSET(qp), AV_OPT_TYPE_INT, { .i64 = 20 }, 0, 52, FLAGS },
      { "quality", "Set encode quality (trades off against speed, higher is faster)",
-       OFFSET(quality), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 2, FLAGS },
+       OFFSET(quality), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 8, FLAGS },
+     { "low_power", "Use low-power encoding mode (experimental: only supported "
+       "on some platforms, does not support all features)",
+       OFFSET(low_power), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, FLAGS },
      { NULL },
  };