Commit 7e49cdd1 authored by Derek Buitenhuis's avatar Derek Buitenhuis

Merge commit '7b3214d0'

* commit '7b3214d0':
  lavc: add a field for passing AVHWFramesContext to encoders
Merged-by: 's avatarDerek Buitenhuis <derek.buitenhuis@gmail.com>
parents ef9915a0 7b3214d0
...@@ -15,6 +15,9 @@ libavutil: 2015-08-28 ...@@ -15,6 +15,9 @@ libavutil: 2015-08-28
API changes, most recent first: API changes, most recent first:
2016-xx-xx - lavc 57.25.0 - avcodec.h
Add AVCodecContext.hw_frames_ctx.
2016-xx-xx - lavfi 6.36.0 - avfilter.h 2016-xx-xx - lavfi 6.36.0 - avfilter.h
xxxxxxx avfilter.h - Add AVFilterLink.hw_frames_ctx. xxxxxxx avfilter.h - Add AVFilterLink.hw_frames_ctx.
xxxxxxx buffersrc.h - Add AVBufferSrcParameters and functions for handling it. xxxxxxx buffersrc.h - Add AVBufferSrcParameters and functions for handling it.
......
...@@ -3361,6 +3361,18 @@ typedef struct AVCodecContext { ...@@ -3361,6 +3361,18 @@ typedef struct AVCodecContext {
AVPacketSideData *coded_side_data; AVPacketSideData *coded_side_data;
int nb_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; } AVCodecContext;
AVRational av_codec_get_pkt_timebase (const AVCodecContext *avctx); AVRational av_codec_get_pkt_timebase (const AVCodecContext *avctx);
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include "libavutil/channel_layout.h" #include "libavutil/channel_layout.h"
#include "libavutil/crc.h" #include "libavutil/crc.h"
#include "libavutil/frame.h" #include "libavutil/frame.h"
#include "libavutil/hwcontext.h"
#include "libavutil/internal.h" #include "libavutil/internal.h"
#include "libavutil/mathematics.h" #include "libavutil/mathematics.h"
#include "libavutil/mem_internal.h" #include "libavutil/mem_internal.h"
...@@ -1489,6 +1490,16 @@ FF_ENABLE_DEPRECATION_WARNINGS ...@@ -1489,6 +1490,16 @@ FF_ENABLE_DEPRECATION_WARNINGS
avctx->time_base.den); avctx->time_base.den);
goto free_and_end; 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;
}
}
} }
avctx->pts_correction_num_faulty_pts = avctx->pts_correction_num_faulty_pts =
...@@ -2564,6 +2575,8 @@ av_cold int avcodec_close(AVCodecContext *avctx) ...@@ -2564,6 +2575,8 @@ av_cold int avcodec_close(AVCodecContext *avctx)
av_freep(&avctx->coded_side_data); av_freep(&avctx->coded_side_data);
avctx->nb_coded_side_data = 0; avctx->nb_coded_side_data = 0;
av_buffer_unref(&avctx->hw_frames_ctx);
if (avctx->priv_data && avctx->codec && avctx->codec->priv_class) if (avctx->priv_data && avctx->codec && avctx->codec->priv_class)
av_opt_free(avctx->priv_data); av_opt_free(avctx->priv_data);
av_opt_free(avctx); av_opt_free(avctx);
......
...@@ -29,8 +29,8 @@ ...@@ -29,8 +29,8 @@
#include "libavutil/version.h" #include "libavutil/version.h"
#define LIBAVCODEC_VERSION_MAJOR 57 #define LIBAVCODEC_VERSION_MAJOR 57
#define LIBAVCODEC_VERSION_MINOR 24 #define LIBAVCODEC_VERSION_MINOR 25
#define LIBAVCODEC_VERSION_MICRO 106 #define LIBAVCODEC_VERSION_MICRO 100
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \ LIBAVCODEC_VERSION_MINOR, \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment