Browse Source

Merge commit '5b145290df2998a9836a93eb925289c6c8b63af0'

* commit '5b145290df2998a9836a93eb925289c6c8b63af0':
  lavc: Add support for increasing hardware frame pool sizes

Merged-by: Mark Thompson <sw@jkqxz.net>
tags/n4.0
Mark Thompson 7 years ago
parent
commit
d23fff0d8a
5 changed files with 28 additions and 1 deletions
  1. +3
    -0
      doc/APIchanges
  2. +14
    -0
      libavcodec/avcodec.h
  3. +9
    -0
      libavcodec/decode.c
  4. +1
    -0
      libavcodec/options_table.h
  5. +1
    -1
      libavcodec/version.h

+ 3
- 0
doc/APIchanges View File

@@ -15,6 +15,9 @@ libavutil: 2017-10-21

API changes, most recent first:

2018-02-xx - xxxxxxx - lavc 58.11.100 - avcodec.h
Add AVCodecContext.extra_hw_frames.

2018-02-06 - 0fd475704e - lavd 58.1.100 - avdevice.h
Deprecate use of av_input_audio_device_next(), av_input_video_device_next(),
av_output_audio_device_next(), av_output_video_device_next().


+ 14
- 0
libavcodec/avcodec.h View File

@@ -3255,6 +3255,20 @@ typedef struct AVCodecContext {
* (with the display dimensions being determined by the crop_* fields).
*/
int apply_cropping;

/*
* Video decoding only. Sets the number of extra hardware frames which
* the decoder will allocate for use by the caller. This must be set
* before avcodec_open2() is called.
*
* Some hardware decoders require all frames that they will use for
* output to be defined in advance before decoding starts. For such
* decoders, the hardware frame pool must therefore be of a fixed size.
* The extra frames set here are on top of any number that the decoder
* needs internally in order to operate normally (for example, frames
* used as reference pictures).
*/
int extra_hw_frames;
} AVCodecContext;

#if FF_API_CODEC_GET_SET


+ 9
- 0
libavcodec/decode.c View File

@@ -1229,6 +1229,15 @@ int avcodec_get_hw_frames_parameters(AVCodecContext *avctx,

ret = hwa->frame_params(avctx, frames_ref);
if (ret >= 0) {
AVHWFramesContext *frames_ctx = (AVHWFramesContext*)frames_ref->data;

if (frames_ctx->initial_pool_size) {
// If the user has requested that extra output surfaces be
// available then add them here.
if (avctx->extra_hw_frames > 0)
frames_ctx->initial_pool_size += avctx->extra_hw_frames;
}

*out_frames_ref = frames_ref;
} else {
av_buffer_unref(&frames_ref);


+ 1
- 0
libavcodec/options_table.h View File

@@ -476,6 +476,7 @@ static const AVOption avcodec_options[] = {
{"ignore_level", "ignore level even if the codec level used is unknown or higher than the maximum supported level reported by the hardware driver", 0, AV_OPT_TYPE_CONST, { .i64 = AV_HWACCEL_FLAG_IGNORE_LEVEL }, INT_MIN, INT_MAX, V | D, "hwaccel_flags" },
{"allow_high_depth", "allow to output YUV pixel formats with a different chroma sampling than 4:2:0 and/or other than 8 bits per component", 0, AV_OPT_TYPE_CONST, {.i64 = AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH }, INT_MIN, INT_MAX, V | D, "hwaccel_flags"},
{"allow_profile_mismatch", "attempt to decode anyway if HW accelerated decoder's supported profiles do not exactly match the stream", 0, AV_OPT_TYPE_CONST, {.i64 = AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH }, INT_MIN, INT_MAX, V | D, "hwaccel_flags"},
{"extra_hw_frames", "Number of extra hardware frames to allocate for the user", OFFSET(extra_hw_frames), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, V|D },
{NULL},
};



+ 1
- 1
libavcodec/version.h View File

@@ -28,7 +28,7 @@
#include "libavutil/version.h"

#define LIBAVCODEC_VERSION_MAJOR 58
#define LIBAVCODEC_VERSION_MINOR 10
#define LIBAVCODEC_VERSION_MINOR 11
#define LIBAVCODEC_VERSION_MICRO 100

#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \


Loading…
Cancel
Save