mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-13 21:28:01 +02:00
avcodec/pgssubdec: Remove redundant freeing code
The caller of display_end_segment() frees the AVSubtitle on error in case ENOMEM is returned or err_recognition is set to explode, so display_end_segment() doesn't have to. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
parent
200a372837
commit
58228ab9b9
@ -534,10 +534,8 @@ static int display_end_segment(AVCodecContext *avctx, void *data,
|
|||||||
PGSSubObject *object;
|
PGSSubObject *object;
|
||||||
|
|
||||||
sub->rects[i] = av_mallocz(sizeof(*sub->rects[0]));
|
sub->rects[i] = av_mallocz(sizeof(*sub->rects[0]));
|
||||||
if (!sub->rects[i]) {
|
if (!sub->rects[i])
|
||||||
avsubtitle_free(sub);
|
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
}
|
|
||||||
sub->num_rects++;
|
sub->num_rects++;
|
||||||
sub->rects[i]->type = SUBTITLE_BITMAP;
|
sub->rects[i]->type = SUBTITLE_BITMAP;
|
||||||
|
|
||||||
@ -547,10 +545,8 @@ static int display_end_segment(AVCodecContext *avctx, void *data,
|
|||||||
// Missing object. Should only happen with damaged streams.
|
// Missing object. Should only happen with damaged streams.
|
||||||
av_log(avctx, AV_LOG_ERROR, "Invalid object id %d\n",
|
av_log(avctx, AV_LOG_ERROR, "Invalid object id %d\n",
|
||||||
ctx->presentation.objects[i].id);
|
ctx->presentation.objects[i].id);
|
||||||
if (avctx->err_recognition & AV_EF_EXPLODE) {
|
if (avctx->err_recognition & AV_EF_EXPLODE)
|
||||||
avsubtitle_free(sub);
|
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
|
||||||
// Leaves rect empty with 0 width and height.
|
// Leaves rect empty with 0 width and height.
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -569,16 +565,13 @@ static int display_end_segment(AVCodecContext *avctx, void *data,
|
|||||||
if (object->rle_remaining_len) {
|
if (object->rle_remaining_len) {
|
||||||
av_log(avctx, AV_LOG_ERROR, "RLE data length %u is %u bytes shorter than expected\n",
|
av_log(avctx, AV_LOG_ERROR, "RLE data length %u is %u bytes shorter than expected\n",
|
||||||
object->rle_data_len, object->rle_remaining_len);
|
object->rle_data_len, object->rle_remaining_len);
|
||||||
if (avctx->err_recognition & AV_EF_EXPLODE) {
|
if (avctx->err_recognition & AV_EF_EXPLODE)
|
||||||
avsubtitle_free(sub);
|
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
ret = decode_rle(avctx, sub->rects[i], object->rle, object->rle_data_len);
|
ret = decode_rle(avctx, sub->rects[i], object->rle, object->rle_data_len);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
if ((avctx->err_recognition & AV_EF_EXPLODE) ||
|
if ((avctx->err_recognition & AV_EF_EXPLODE) ||
|
||||||
ret == AVERROR(ENOMEM)) {
|
ret == AVERROR(ENOMEM)) {
|
||||||
avsubtitle_free(sub);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
sub->rects[i]->w = 0;
|
sub->rects[i]->w = 0;
|
||||||
@ -589,10 +582,8 @@ static int display_end_segment(AVCodecContext *avctx, void *data,
|
|||||||
/* Allocate memory for colors */
|
/* Allocate memory for colors */
|
||||||
sub->rects[i]->nb_colors = 256;
|
sub->rects[i]->nb_colors = 256;
|
||||||
sub->rects[i]->data[1] = av_mallocz(AVPALETTE_SIZE);
|
sub->rects[i]->data[1] = av_mallocz(AVPALETTE_SIZE);
|
||||||
if (!sub->rects[i]->data[1]) {
|
if (!sub->rects[i]->data[1])
|
||||||
avsubtitle_free(sub);
|
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
}
|
|
||||||
|
|
||||||
if (!ctx->forced_subs_only || ctx->presentation.objects[i].composition_flag & 0x40)
|
if (!ctx->forced_subs_only || ctx->presentation.objects[i].composition_flag & 0x40)
|
||||||
memcpy(sub->rects[i]->data[1], palette->clut, sub->rects[i]->nb_colors * sizeof(uint32_t));
|
memcpy(sub->rects[i]->data[1], palette->clut, sub->rects[i]->nb_colors * sizeof(uint32_t));
|
||||||
|
Loading…
Reference in New Issue
Block a user