avcodec/libx265: Allow user-supplied buffers
Here the packet size is known before allocating the packet, so that supporting user-supplied buffers is trivial. Reviewed-by: James Almer <jamrial@gmail.com> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
@@ -32,6 +32,7 @@
|
|||||||
#include "libavutil/opt.h"
|
#include "libavutil/opt.h"
|
||||||
#include "libavutil/pixdesc.h"
|
#include "libavutil/pixdesc.h"
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
|
#include "encode.h"
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
#include "packet_internal.h"
|
#include "packet_internal.h"
|
||||||
|
|
||||||
@@ -531,7 +532,7 @@ static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
|
|||||||
for (i = 0; i < nnal; i++)
|
for (i = 0; i < nnal; i++)
|
||||||
payload += nal[i].sizeBytes;
|
payload += nal[i].sizeBytes;
|
||||||
|
|
||||||
ret = ff_alloc_packet2(avctx, pkt, payload, payload);
|
ret = ff_get_encode_buffer(avctx, pkt, payload, 0);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
av_log(avctx, AV_LOG_ERROR, "Error getting output packet.\n");
|
av_log(avctx, AV_LOG_ERROR, "Error getting output packet.\n");
|
||||||
return ret;
|
return ret;
|
||||||
@@ -687,6 +688,9 @@ AVCodec ff_libx265_encoder = {
|
|||||||
.long_name = NULL_IF_CONFIG_SMALL("libx265 H.265 / HEVC"),
|
.long_name = NULL_IF_CONFIG_SMALL("libx265 H.265 / HEVC"),
|
||||||
.type = AVMEDIA_TYPE_VIDEO,
|
.type = AVMEDIA_TYPE_VIDEO,
|
||||||
.id = AV_CODEC_ID_HEVC,
|
.id = AV_CODEC_ID_HEVC,
|
||||||
|
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY |
|
||||||
|
AV_CODEC_CAP_OTHER_THREADS |
|
||||||
|
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
|
||||||
.init = libx265_encode_init,
|
.init = libx265_encode_init,
|
||||||
.init_static_data = libx265_encode_init_csp,
|
.init_static_data = libx265_encode_init_csp,
|
||||||
.encode2 = libx265_encode_frame,
|
.encode2 = libx265_encode_frame,
|
||||||
@@ -694,8 +698,6 @@ AVCodec ff_libx265_encoder = {
|
|||||||
.priv_data_size = sizeof(libx265Context),
|
.priv_data_size = sizeof(libx265Context),
|
||||||
.priv_class = &class,
|
.priv_class = &class,
|
||||||
.defaults = x265_defaults,
|
.defaults = x265_defaults,
|
||||||
.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_OTHER_THREADS |
|
|
||||||
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
|
|
||||||
.caps_internal = FF_CODEC_CAP_AUTO_THREADS,
|
.caps_internal = FF_CODEC_CAP_AUTO_THREADS,
|
||||||
.wrapper_name = "libx265",
|
.wrapper_name = "libx265",
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user