Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Merge commit 'e85f6f7f8d037c0af0f294000718d9ba22753baa'
* commit 'e85f6f7f8d037c0af0f294000718d9ba22753baa':
lavc: allow using AVCodecContext.hw_frames_ctx for decoding
Conflicts:
doc/APIchanges
libavcodec/version.h
Merged-by: James Almer <jamrial@gmail.com>
- Loading branch information
Showing
with
37 additions
and
9 deletions.
-
+3
−0
doc/APIchanges
-
+17
−7
libavcodec/avcodec.h
-
+15
−0
libavcodec/utils.c
-
+2
−2
libavcodec/version.h
|
|
@@ -15,6 +15,9 @@ libavutil: 2015-08-28 |
|
|
|
|
|
API changes, most recent first: |
|
|
|
|
|
2016-09-xx - xxxxxxx - lavc 57.59.100/ 57.23.0 - avcodec.h |
|
|
AVCodecContext.hw_frames_ctx now may be used by decoders. |
|
|
|
|
|
2016-09-27 - xxxxxxx - lavf 57.51.100 - avformat.h |
|
|
Add av_stream_get_codec_timebase() |
|
|
|
|
|
|
|
|
@@ -3518,15 +3518,25 @@ typedef struct AVCodecContext { |
|
|
int nb_coded_side_data; |
|
|
|
|
|
/** |
|
|
* Encoding only. |
|
|
* A reference to the AVHWFramesContext describing the input (for encoding) |
|
|
* or output (decoding) frames. The reference is set by the caller and |
|
|
* afterwards owned (and freed) by libavcodec. |
|
|
* |
|
|
* 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. |
|
|
* - decoding: This field should be set by the caller from the get_format() |
|
|
* callback. The previous reference (if any) will always be |
|
|
* unreffed by libavcodec before the get_format() call. |
|
|
* |
|
|
* This field should be set before avcodec_open2() is called and is |
|
|
* afterwards owned and managed by libavcodec. |
|
|
* If the default get_buffer2() is used with a hwaccel pixel |
|
|
* format, then this AVHWFramesContext will be used for |
|
|
* allocating the frame buffers. |
|
|
* |
|
|
* - encoding: 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. |
|
|
*/ |
|
|
AVBufferRef *hw_frames_ctx; |
|
|
|
|
|
|
|
|
@@ -724,6 +724,9 @@ int avcodec_default_get_buffer2(AVCodecContext *avctx, AVFrame *frame, int flags |
|
|
{ |
|
|
int ret; |
|
|
|
|
|
if (avctx->hw_frames_ctx) |
|
|
return av_hwframe_get_buffer(avctx->hw_frames_ctx, frame, 0); |
|
|
|
|
|
if ((ret = update_frame_pool(avctx, frame)) < 0) |
|
|
return ret; |
|
|
|
|
|
@@ -1119,6 +1122,8 @@ int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt) |
|
|
av_freep(&avctx->internal->hwaccel_priv_data); |
|
|
avctx->hwaccel = NULL; |
|
|
|
|
|
av_buffer_unref(&avctx->hw_frames_ctx); |
|
|
|
|
|
ret = avctx->get_format(avctx, choices); |
|
|
|
|
|
desc = av_pix_fmt_desc_get(ret); |
|
|
@@ -1134,6 +1139,16 @@ int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt) |
|
|
break; |
|
|
#endif |
|
|
|
|
|
if (avctx->hw_frames_ctx) { |
|
|
AVHWFramesContext *hw_frames_ctx = (AVHWFramesContext*)avctx->hw_frames_ctx->data; |
|
|
if (hw_frames_ctx->format != ret) { |
|
|
av_log(avctx, AV_LOG_ERROR, "Format returned from get_buffer() " |
|
|
"does not match the format of provided AVHWFramesContext\n"); |
|
|
ret = AV_PIX_FMT_NONE; |
|
|
break; |
|
|
} |
|
|
} |
|
|
|
|
|
if (!setup_hwaccel(avctx, ret, desc->name)) |
|
|
break; |
|
|
|
|
|
|
|
|
@@ -28,8 +28,8 @@ |
|
|
#include "libavutil/version.h" |
|
|
|
|
|
#define LIBAVCODEC_VERSION_MAJOR 57 |
|
|
#define LIBAVCODEC_VERSION_MINOR 58 |
|
|
#define LIBAVCODEC_VERSION_MICRO 104 |
|
|
#define LIBAVCODEC_VERSION_MINOR 59 |
|
|
#define LIBAVCODEC_VERSION_MICRO 100 |
|
|
|
|
|
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ |
|
|
LIBAVCODEC_VERSION_MINOR, \ |
|
|
|