mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-24 13:56:33 +02:00
lavc/mediacodec: use AVMediaCodecDeviceContext hw_device_ctx if set
Signed-off-by: Matthieu Bouron <matthieu.bouron@gmail.com>
This commit is contained in:
parent
e4d9f05ca7
commit
8bf4e6d3ce
@ -15,6 +15,9 @@ libavutil: 2017-10-21
|
|||||||
|
|
||||||
API changes, most recent first:
|
API changes, most recent first:
|
||||||
|
|
||||||
|
2017-xx-xx - xxxxxxx - lavc 58.8.100 - avcodec.h
|
||||||
|
The MediaCodec decoders now support AVCodecContext.hw_device_ctx.
|
||||||
|
|
||||||
2017-xx-xx - xxxxxxx - lavu 56.6.100 - hwcontext.h hwcontext_mediacodec.h
|
2017-xx-xx - xxxxxxx - lavu 56.6.100 - hwcontext.h hwcontext_mediacodec.h
|
||||||
Add AV_HWDEVICE_TYPE_MEDIACODEC and a new installed header with
|
Add AV_HWDEVICE_TYPE_MEDIACODEC and a new installed header with
|
||||||
MediaCodec-specific hwcontext definitions.
|
MediaCodec-specific hwcontext definitions.
|
||||||
|
@ -520,8 +520,9 @@ static const AVCodecHWConfigInternal *mediacodec_hw_configs[] = {
|
|||||||
&(const AVCodecHWConfigInternal) {
|
&(const AVCodecHWConfigInternal) {
|
||||||
.public = {
|
.public = {
|
||||||
.pix_fmt = AV_PIX_FMT_MEDIACODEC,
|
.pix_fmt = AV_PIX_FMT_MEDIACODEC,
|
||||||
.methods = AV_CODEC_HW_CONFIG_METHOD_AD_HOC,
|
.methods = AV_CODEC_HW_CONFIG_METHOD_AD_HOC |
|
||||||
.device_type = AV_HWDEVICE_TYPE_NONE,
|
AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX,
|
||||||
|
.device_type = AV_HWDEVICE_TYPE_MEDIACODEC,
|
||||||
},
|
},
|
||||||
.hwaccel = NULL,
|
.hwaccel = NULL,
|
||||||
},
|
},
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#include "libavutil/common.h"
|
#include "libavutil/common.h"
|
||||||
|
#include "libavutil/hwcontext_mediacodec.h"
|
||||||
#include "libavutil/mem.h"
|
#include "libavutil/mem.h"
|
||||||
#include "libavutil/log.h"
|
#include "libavutil/log.h"
|
||||||
#include "libavutil/pixfmt.h"
|
#include "libavutil/pixfmt.h"
|
||||||
@ -476,7 +477,18 @@ int ff_mediacodec_dec_init(AVCodecContext *avctx, MediaCodecDecContext *s,
|
|||||||
if (pix_fmt == AV_PIX_FMT_MEDIACODEC) {
|
if (pix_fmt == AV_PIX_FMT_MEDIACODEC) {
|
||||||
AVMediaCodecContext *user_ctx = avctx->hwaccel_context;
|
AVMediaCodecContext *user_ctx = avctx->hwaccel_context;
|
||||||
|
|
||||||
if (user_ctx && user_ctx->surface) {
|
if (avctx->hw_device_ctx) {
|
||||||
|
AVHWDeviceContext *device_ctx = (AVHWDeviceContext*)(avctx->hw_device_ctx->data);
|
||||||
|
if (device_ctx->type == AV_HWDEVICE_TYPE_MEDIACODEC) {
|
||||||
|
if (device_ctx->hwctx) {
|
||||||
|
AVMediaCodecDeviceContext *mediacodec_ctx = (AVMediaCodecDeviceContext *)device_ctx->hwctx;
|
||||||
|
s->surface = ff_mediacodec_surface_ref(mediacodec_ctx->surface, avctx);
|
||||||
|
av_log(avctx, AV_LOG_INFO, "Using surface %p\n", s->surface);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!s->surface && user_ctx && user_ctx->surface) {
|
||||||
s->surface = ff_mediacodec_surface_ref(user_ctx->surface, avctx);
|
s->surface = ff_mediacodec_surface_ref(user_ctx->surface, avctx);
|
||||||
av_log(avctx, AV_LOG_INFO, "Using surface %p\n", s->surface);
|
av_log(avctx, AV_LOG_INFO, "Using surface %p\n", s->surface);
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
#include "libavutil/version.h"
|
#include "libavutil/version.h"
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_MAJOR 58
|
#define LIBAVCODEC_VERSION_MAJOR 58
|
||||||
#define LIBAVCODEC_VERSION_MINOR 7
|
#define LIBAVCODEC_VERSION_MINOR 8
|
||||||
#define LIBAVCODEC_VERSION_MICRO 100
|
#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, \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user