@@ -472,6 +472,7 @@ OBJS-$(CONFIG_WMV2_ENCODER) += wmv2enc.o wmv2.o \ | |||||
msmpeg4.o msmpeg4enc.o msmpeg4data.o | msmpeg4.o msmpeg4enc.o msmpeg4data.o | ||||
OBJS-$(CONFIG_WNV1_DECODER) += wnv1.o | OBJS-$(CONFIG_WNV1_DECODER) += wnv1.o | ||||
OBJS-$(CONFIG_WS_SND1_DECODER) += ws-snd1.o | OBJS-$(CONFIG_WS_SND1_DECODER) += ws-snd1.o | ||||
OBJS-$(CONFIG_WRAPPED_AVFRAME_ENCODER) += wrapped_avframe.o | |||||
OBJS-$(CONFIG_XAN_DPCM_DECODER) += dpcm.o | OBJS-$(CONFIG_XAN_DPCM_DECODER) += dpcm.o | ||||
OBJS-$(CONFIG_XAN_WC3_DECODER) += xan.o | OBJS-$(CONFIG_XAN_WC3_DECODER) += xan.o | ||||
OBJS-$(CONFIG_XAN_WC4_DECODER) += xxan.o | OBJS-$(CONFIG_XAN_WC4_DECODER) += xxan.o | ||||
@@ -292,6 +292,7 @@ void avcodec_register_all(void) | |||||
REGISTER_DECODER(VP9, vp9); | REGISTER_DECODER(VP9, vp9); | ||||
REGISTER_DECODER(VQA, vqa); | REGISTER_DECODER(VQA, vqa); | ||||
REGISTER_DECODER(WEBP, webp); | REGISTER_DECODER(WEBP, webp); | ||||
REGISTER_ENCODER(WRAPPED_AVFRAME, wrapped_avframe); | |||||
REGISTER_ENCDEC (WMV1, wmv1); | REGISTER_ENCDEC (WMV1, wmv1); | ||||
REGISTER_ENCDEC (WMV2, wmv2); | REGISTER_ENCDEC (WMV2, wmv2); | ||||
REGISTER_DECODER(WMV3, wmv3); | REGISTER_DECODER(WMV3, wmv3); | ||||
@@ -477,6 +477,7 @@ enum AVCodecID { | |||||
AV_CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems | AV_CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems | ||||
* stream (only used by libavformat) */ | * stream (only used by libavformat) */ | ||||
AV_CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing only metadata information. | AV_CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing only metadata information. | ||||
AV_CODEC_ID_WRAPPED_AVFRAME = 0x21001, ///< Passthrough codec, AVFrames wrapped in AVPacket | |||||
}; | }; | ||||
/** | /** | ||||
@@ -1169,6 +1169,13 @@ static const AVCodecDescriptor codec_descriptors[] = { | |||||
.long_name = NULL_IF_CONFIG_SMALL("Screenpresso"), | .long_name = NULL_IF_CONFIG_SMALL("Screenpresso"), | ||||
.props = AV_CODEC_PROP_LOSSLESS, | .props = AV_CODEC_PROP_LOSSLESS, | ||||
}, | }, | ||||
{ | |||||
.id = AV_CODEC_ID_WRAPPED_AVFRAME, | |||||
.type = AVMEDIA_TYPE_VIDEO, | |||||
.name = "wrapped_avframe", | |||||
.long_name = NULL_IF_CONFIG_SMALL("AVFrame to AVPacket passthrough"), | |||||
.props = AV_CODEC_PROP_LOSSLESS, | |||||
}, | |||||
/* image codecs */ | /* image codecs */ | ||||
{ | { | ||||
@@ -29,7 +29,7 @@ | |||||
#include "libavutil/version.h" | #include "libavutil/version.h" | ||||
#define LIBAVCODEC_VERSION_MAJOR 57 | #define LIBAVCODEC_VERSION_MAJOR 57 | ||||
#define LIBAVCODEC_VERSION_MINOR 3 | |||||
#define LIBAVCODEC_VERSION_MINOR 4 | |||||
#define LIBAVCODEC_VERSION_MICRO 0 | #define LIBAVCODEC_VERSION_MICRO 0 | ||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | ||||
@@ -0,0 +1,74 @@ | |||||
/* | |||||
* AVFrame wrapper | |||||
* Copyright (c) 2015 Luca Barbato | |||||
* | |||||
* This file is part of Libav. | |||||
* | |||||
* Libav is free software; you can redistribute it and/or | |||||
* modify it under the terms of the GNU Lesser General Public | |||||
* License as published by the Free Software Foundation; either | |||||
* version 2.1 of the License, or (at your option) any later version. | |||||
* | |||||
* Libav is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||||
* Lesser General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU Lesser General Public | |||||
* License along with Libav; if not, write to the Free Software | |||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |||||
*/ | |||||
/** | |||||
* @file | |||||
* Simple wrapper to store an AVFrame and forward it as AVPacket. | |||||
*/ | |||||
#include "avcodec.h" | |||||
#include "internal.h" | |||||
#include "libavutil/internal.h" | |||||
#include "libavutil/frame.h" | |||||
#include "libavutil/buffer.h" | |||||
#include "libavutil/pixdesc.h" | |||||
static void wrapped_avframe_release_buffer(void *unused, uint8_t *data) | |||||
{ | |||||
AVFrame *frame = (AVFrame *)data; | |||||
av_frame_free(&frame); | |||||
} | |||||
static int wrapped_avframe_encode(AVCodecContext *avctx, AVPacket *pkt, | |||||
const AVFrame *frame, int *got_packet) | |||||
{ | |||||
AVFrame *wrapped = av_frame_clone(frame); | |||||
int ret; | |||||
if (!wrapped) | |||||
return AVERROR(ENOMEM); | |||||
pkt->buf = av_buffer_create((uint8_t *)wrapped, sizeof(*wrapped), | |||||
wrapped_avframe_release_buffer, NULL, | |||||
AV_BUFFER_FLAG_READONLY); | |||||
if (!pkt->buf) { | |||||
av_frame_free(&wrapped); | |||||
return AVERROR(ENOMEM); | |||||
} | |||||
pkt->data = (uint8_t *)wrapped; | |||||
pkt->size = sizeof(*wrapped); | |||||
pkt->flags |= AV_PKT_FLAG_KEY; | |||||
*got_packet = 1; | |||||
return 0; | |||||
} | |||||
AVCodec ff_wrapped_avframe_encoder = { | |||||
.name = "wrapped_avframe", | |||||
.long_name = NULL_IF_CONFIG_SMALL("AVFrame to AVPacket passthrough"), | |||||
.type = AVMEDIA_TYPE_VIDEO, | |||||
.id = AV_CODEC_ID_WRAPPED_AVFRAME, | |||||
.encode2 = wrapped_avframe_encode, | |||||
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, | |||||
}; |