* commit '7b3214d0050613bd347a2e41c9f78ffb766da25e': lavc: add a field for passing AVHWFramesContext to encoders Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>tags/n3.1
| @@ -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 { | |||||
| 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 @@ | |||||
| #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 | |||||
| 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) | |||||
| 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 @@ | |||||
| #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_MICRO 106 | |||||
| #define LIBAVCODEC_VERSION_MINOR 25 | |||||
| #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, \ | ||||