Merge commit '7b3214d0050613bd347a2e41c9f78ffb766da25e'
authorDerek Buitenhuis <derek.buitenhuis@gmail.com>
Wed, 24 Feb 2016 17:05:11 +0000 (17:05 +0000)
committerDerek Buitenhuis <derek.buitenhuis@gmail.com>
Wed, 24 Feb 2016 17:05:11 +0000 (17:05 +0000)
* commit '7b3214d0050613bd347a2e41c9f78ffb766da25e':
  lavc: add a field for passing AVHWFramesContext to encoders

Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
1  2 
doc/APIchanges
libavcodec/avcodec.h
libavcodec/utils.c
libavcodec/version.h

diff --cc doc/APIchanges
@@@ -15,7 -13,10 +15,10 @@@ libavutil:     2015-08-2
  
  API changes, most recent first:
  
 -2016-xx-xx - lavc 57.13.0 - avcodec.h
++2016-xx-xx - lavc 57.25.0 - avcodec.h
+   Add AVCodecContext.hw_frames_ctx.
 -2016-xx-xx - lavfi 6.2.0 - avfilter.h
 +2016-xx-xx - lavfi 6.36.0 - avfilter.h
    xxxxxxx avfilter.h - Add AVFilterLink.hw_frames_ctx.
    xxxxxxx buffersrc.h - Add AVBufferSrcParameters and functions for handling it.
  
@@@ -3361,25 -2979,20 +3361,37 @@@ typedef struct AVCodecContext 
      AVPacketSideData *coded_side_data;
      int            nb_coded_side_data;
  
+     /**
+      * Encoding only.
+      *
+      * For hardware encoders configured to use a hwaccel pixel format, this
+      * field should be set by the caller to a reference to the AVHWFramesContext
+      * describing input frames. AVHWFramesContext.format must be equal to
+      * AVCodecContext.pix_fmt.
+      *
+      * This field should be set before avcodec_open2() is called and is
+      * afterwards owned and managed by libavcodec.
+      */
+     AVBufferRef *hw_frames_ctx;
  } AVCodecContext;
  
 +AVRational av_codec_get_pkt_timebase         (const AVCodecContext *avctx);
 +void       av_codec_set_pkt_timebase         (AVCodecContext *avctx, AVRational val);
 +
 +const AVCodecDescriptor *av_codec_get_codec_descriptor(const AVCodecContext *avctx);
 +void                     av_codec_set_codec_descriptor(AVCodecContext *avctx, const AVCodecDescriptor *desc);
 +
 +unsigned av_codec_get_codec_properties(const AVCodecContext *avctx);
 +
 +int  av_codec_get_lowres(const AVCodecContext *avctx);
 +void av_codec_set_lowres(AVCodecContext *avctx, int val);
 +
 +int  av_codec_get_seek_preroll(const AVCodecContext *avctx);
 +void av_codec_set_seek_preroll(AVCodecContext *avctx, int val);
 +
 +uint16_t *av_codec_get_chroma_intra_matrix(const AVCodecContext *avctx);
 +void av_codec_set_chroma_intra_matrix(AVCodecContext *avctx, uint16_t *val);
 +
  /**
   * AVProfile.
   */
  #include "libavutil/channel_layout.h"
  #include "libavutil/crc.h"
  #include "libavutil/frame.h"
+ #include "libavutil/hwcontext.h"
  #include "libavutil/internal.h"
  #include "libavutil/mathematics.h"
 +#include "libavutil/mem_internal.h"
  #include "libavutil/pixdesc.h"
  #include "libavutil/imgutils.h"
  #include "libavutil/samplefmt.h"
@@@ -1489,20 -1060,19 +1490,30 @@@ FF_ENABLE_DEPRECATION_WARNING
                     avctx->time_base.den);
              goto free_and_end;
          }
+         if (avctx->hw_frames_ctx) {
+             AVHWFramesContext *frames_ctx = (AVHWFramesContext*)avctx->hw_frames_ctx->data;
+             if (frames_ctx->format != avctx->pix_fmt) {
+                 av_log(avctx, AV_LOG_ERROR,
+                        "Mismatching AVCodecContext.pix_fmt and AVHWFramesContext.format\n");
+                 ret = AVERROR(EINVAL);
+                 goto free_and_end;
+             }
+         }
      }
  
 -    if (avctx->codec->init && !(avctx->active_thread_type & FF_THREAD_FRAME)) {
 +    avctx->pts_correction_num_faulty_pts =
 +    avctx->pts_correction_num_faulty_dts = 0;
 +    avctx->pts_correction_last_pts =
 +    avctx->pts_correction_last_dts = INT64_MIN;
 +
 +    if (   !CONFIG_GRAY && avctx->flags & AV_CODEC_FLAG_GRAY
 +        && avctx->codec_descriptor->type == AVMEDIA_TYPE_VIDEO)
 +        av_log(avctx, AV_LOG_WARNING,
 +               "gray decoding requested but not enabled at configuration time\n");
 +
 +    if (   avctx->codec->init && (!(avctx->active_thread_type&FF_THREAD_FRAME)
 +        || avctx->internal->frame_thread_encoder)) {
          ret = avctx->codec->init(avctx);
          if (ret < 0) {
              goto free_and_end;
@@@ -28,9 -28,9 +28,9 @@@
  
  #include "libavutil/version.h"
  
 -#define LIBAVCODEC_VERSION_MAJOR 57
 -#define LIBAVCODEC_VERSION_MINOR 13
 -#define LIBAVCODEC_VERSION_MICRO  0
 +#define LIBAVCODEC_VERSION_MAJOR  57
- #define LIBAVCODEC_VERSION_MINOR  24
- #define LIBAVCODEC_VERSION_MICRO 106
++#define LIBAVCODEC_VERSION_MINOR  25
++#define LIBAVCODEC_VERSION_MICRO 100
  
  #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
                                                 LIBAVCODEC_VERSION_MINOR, \