mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-02-04 06:08:26 +02:00
lavc: add generic-encode-layer private data
Move AVCodecInternal.intra_only_flag to it, should should not be visible outside of encode.c.
This commit is contained in:
parent
f2fb882b3f
commit
232700154c
@ -152,7 +152,7 @@ int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *code
|
|||||||
|
|
||||||
avci = av_codec_is_decoder(codec) ?
|
avci = av_codec_is_decoder(codec) ?
|
||||||
ff_decode_internal_alloc() :
|
ff_decode_internal_alloc() :
|
||||||
av_mallocz(sizeof(AVCodecInternal));
|
ff_encode_internal_alloc();
|
||||||
if (!avci) {
|
if (!avci) {
|
||||||
ret = AVERROR(ENOMEM);
|
ret = AVERROR(ENOMEM);
|
||||||
goto end;
|
goto end;
|
||||||
|
@ -54,5 +54,6 @@ void ff_decode_flush_buffers(struct AVCodecContext *avctx);
|
|||||||
void ff_encode_flush_buffers(struct AVCodecContext *avctx);
|
void ff_encode_flush_buffers(struct AVCodecContext *avctx);
|
||||||
|
|
||||||
struct AVCodecInternal *ff_decode_internal_alloc(void);
|
struct AVCodecInternal *ff_decode_internal_alloc(void);
|
||||||
|
struct AVCodecInternal *ff_encode_internal_alloc(void);
|
||||||
|
|
||||||
#endif // AVCODEC_AVCODEC_INTERNAL_H
|
#endif // AVCODEC_AVCODEC_INTERNAL_H
|
||||||
|
@ -33,6 +33,22 @@
|
|||||||
#include "frame_thread_encoder.h"
|
#include "frame_thread_encoder.h"
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
|
typedef struct EncodeContext {
|
||||||
|
AVCodecInternal avci;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is set to AV_PKT_FLAG_KEY for encoders that encode intra-only
|
||||||
|
* formats (i.e. whose codec descriptor has AV_CODEC_PROP_INTRA_ONLY set).
|
||||||
|
* This is used to set said flag generically for said encoders.
|
||||||
|
*/
|
||||||
|
int intra_only_flag;
|
||||||
|
} EncodeContext;
|
||||||
|
|
||||||
|
static EncodeContext *encode_ctx(AVCodecInternal *avci)
|
||||||
|
{
|
||||||
|
return (EncodeContext*)avci;
|
||||||
|
}
|
||||||
|
|
||||||
int ff_alloc_packet(AVCodecContext *avctx, AVPacket *avpkt, int64_t size)
|
int ff_alloc_packet(AVCodecContext *avctx, AVPacket *avpkt, int64_t size)
|
||||||
{
|
{
|
||||||
if (size < 0 || size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE) {
|
if (size < 0 || size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE) {
|
||||||
@ -372,7 +388,7 @@ static int encode_receive_packet_internal(AVCodecContext *avctx, AVPacket *avpkt
|
|||||||
} else
|
} else
|
||||||
ret = encode_simple_receive_packet(avctx, avpkt);
|
ret = encode_simple_receive_packet(avctx, avpkt);
|
||||||
if (ret >= 0)
|
if (ret >= 0)
|
||||||
avpkt->flags |= avci->intra_only_flag;
|
avpkt->flags |= encode_ctx(avci)->intra_only_flag;
|
||||||
|
|
||||||
if (ret == AVERROR_EOF)
|
if (ret == AVERROR_EOF)
|
||||||
avci->draining_done = 1;
|
avci->draining_done = 1;
|
||||||
@ -680,6 +696,7 @@ static int encode_preinit_audio(AVCodecContext *avctx)
|
|||||||
int ff_encode_preinit(AVCodecContext *avctx)
|
int ff_encode_preinit(AVCodecContext *avctx)
|
||||||
{
|
{
|
||||||
AVCodecInternal *avci = avctx->internal;
|
AVCodecInternal *avci = avctx->internal;
|
||||||
|
EncodeContext *ec = encode_ctx(avci);
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (avctx->time_base.num <= 0 || avctx->time_base.den <= 0) {
|
if (avctx->time_base.num <= 0 || avctx->time_base.den <= 0) {
|
||||||
@ -710,7 +727,7 @@ int ff_encode_preinit(AVCodecContext *avctx)
|
|||||||
avctx->rc_initial_buffer_occupancy = avctx->rc_buffer_size * 3LL / 4;
|
avctx->rc_initial_buffer_occupancy = avctx->rc_buffer_size * 3LL / 4;
|
||||||
|
|
||||||
if (avctx->codec_descriptor->props & AV_CODEC_PROP_INTRA_ONLY)
|
if (avctx->codec_descriptor->props & AV_CODEC_PROP_INTRA_ONLY)
|
||||||
avctx->internal->intra_only_flag = AV_PKT_FLAG_KEY;
|
ec->intra_only_flag = AV_PKT_FLAG_KEY;
|
||||||
|
|
||||||
if (ffcodec(avctx->codec)->cb_type == FF_CODEC_CB_TYPE_ENCODE) {
|
if (ffcodec(avctx->codec)->cb_type == FF_CODEC_CB_TYPE_ENCODE) {
|
||||||
avci->in_frame = av_frame_alloc();
|
avci->in_frame = av_frame_alloc();
|
||||||
@ -795,3 +812,8 @@ void ff_encode_flush_buffers(AVCodecContext *avctx)
|
|||||||
if (avci->recon_frame)
|
if (avci->recon_frame)
|
||||||
av_frame_unref(avci->recon_frame);
|
av_frame_unref(avci->recon_frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AVCodecInternal *ff_encode_internal_alloc(void)
|
||||||
|
{
|
||||||
|
return av_mallocz(sizeof(EncodeContext));
|
||||||
|
}
|
||||||
|
@ -95,13 +95,6 @@ typedef struct AVCodecInternal {
|
|||||||
uint8_t *byte_buffer;
|
uint8_t *byte_buffer;
|
||||||
unsigned int byte_buffer_size;
|
unsigned int byte_buffer_size;
|
||||||
|
|
||||||
/**
|
|
||||||
* This is set to AV_PKT_FLAG_KEY for encoders that encode intra-only
|
|
||||||
* formats (i.e. whose codec descriptor has AV_CODEC_PROP_INTRA_ONLY set).
|
|
||||||
* This is used to set said flag generically for said encoders.
|
|
||||||
*/
|
|
||||||
int intra_only_flag;
|
|
||||||
|
|
||||||
void *frame_thread_encoder;
|
void *frame_thread_encoder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user