1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-15 14:13:16 +02:00

lavc/libx264: unify cleanup in setup_frame()

This commit is contained in:
Anton Khirnov
2022-11-27 10:45:15 +01:00
parent 87eb362693
commit cccd2c2179

View File

@@ -489,10 +489,8 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame,
sd = av_frame_get_side_data(frame, AV_FRAME_DATA_REGIONS_OF_INTEREST); sd = av_frame_get_side_data(frame, AV_FRAME_DATA_REGIONS_OF_INTEREST);
if (sd) { if (sd) {
ret = setup_roi(ctx, pic, bit_depth, frame, sd->data, sd->size); ret = setup_roi(ctx, pic, bit_depth, frame, sd->data, sd->size);
if (ret < 0) { if (ret < 0)
free_picture(ctx); goto fail;
return ret;
}
} }
if (x4->udu_sei) { if (x4->udu_sei) {
@@ -504,16 +502,16 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame,
continue; continue;
tmp = av_fast_realloc(sei->payloads, &sei_data_size, (sei->num_payloads + 1) * sizeof(*sei_payload)); tmp = av_fast_realloc(sei->payloads, &sei_data_size, (sei->num_payloads + 1) * sizeof(*sei_payload));
if (!tmp) { if (!tmp) {
free_picture(ctx); ret = AVERROR(ENOMEM);
return AVERROR(ENOMEM); goto fail;
} }
sei->payloads = tmp; sei->payloads = tmp;
sei->sei_free = av_free; sei->sei_free = av_free;
sei_payload = &sei->payloads[sei->num_payloads]; sei_payload = &sei->payloads[sei->num_payloads];
sei_payload->payload = av_memdup(side_data->data, side_data->size); sei_payload->payload = av_memdup(side_data->data, side_data->size);
if (!sei_payload->payload) { if (!sei_payload->payload) {
free_picture(ctx); ret = AVERROR(ENOMEM);
return AVERROR(ENOMEM); goto fail;
} }
sei_payload->payload_size = side_data->size; sei_payload->payload_size = side_data->size;
sei_payload->payload_type = SEI_TYPE_USER_DATA_UNREGISTERED; sei_payload->payload_type = SEI_TYPE_USER_DATA_UNREGISTERED;
@@ -523,6 +521,11 @@ static int setup_frame(AVCodecContext *ctx, const AVFrame *frame,
*ppic = pic; *ppic = pic;
return 0; return 0;
fail:
free_picture(ctx);
*ppic = NULL;
return ret;
} }
static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame, static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame,