Browse Source

lavc: add a field for passing AVHWFramesContext to encoders

tags/n3.1
Anton Khirnov 10 years ago
parent
commit
7b3214d005
4 changed files with 29 additions and 1 deletions
  1. +3
    -0
      doc/APIchanges
  2. +12
    -0
      libavcodec/avcodec.h
  3. +13
    -0
      libavcodec/utils.c
  4. +1
    -1
      libavcodec/version.h

+ 3
- 0
doc/APIchanges View File

@@ -13,6 +13,9 @@ libavutil: 2015-08-28

API changes, most recent first:

2016-xx-xx - lavc 57.13.0 - avcodec.h
Add AVCodecContext.hw_frames_ctx.

2016-xx-xx - lavfi 6.2.0 - avfilter.h
xxxxxxx avfilter.h - Add AVFilterLink.hw_frames_ctx.
xxxxxxx buffersrc.h - Add AVBufferSrcParameters and functions for handling it.


+ 12
- 0
libavcodec/avcodec.h View File

@@ -2979,6 +2979,18 @@ 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;

/**


+ 13
- 0
libavcodec/utils.c View File

@@ -32,6 +32,7 @@
#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/pixdesc.h"
@@ -1059,6 +1060,16 @@ FF_ENABLE_DEPRECATION_WARNINGS
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)) {
@@ -1639,6 +1650,8 @@ av_cold int avcodec_close(AVCodecContext *avctx)
av_freep(&avctx->coded_side_data);
avctx->nb_coded_side_data = 0;

av_buffer_unref(&avctx->hw_frames_ctx);

if (avctx->priv_data && avctx->codec && avctx->codec->priv_class)
av_opt_free(avctx->priv_data);
av_opt_free(avctx);


+ 1
- 1
libavcodec/version.h View File

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

#define LIBAVCODEC_VERSION_MAJOR 57
#define LIBAVCODEC_VERSION_MINOR 12
#define LIBAVCODEC_VERSION_MINOR 13
#define LIBAVCODEC_VERSION_MICRO 0

#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \


Loading…
Cancel
Save