mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-02-18 21:07:01 +00:00
dvbsubdec: Split delete_state()
This commit is contained in:
parent
9522a752bf
commit
e822c237b3
@ -321,21 +321,10 @@ static void delete_region_display_list(DVBSubContext *ctx, DVBSubRegion *region)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void delete_state(DVBSubContext *ctx)
|
static void delete_cluts(DVBSubContext *ctx)
|
||||||
{
|
{
|
||||||
DVBSubRegion *region;
|
|
||||||
DVBSubCLUT *clut;
|
DVBSubCLUT *clut;
|
||||||
|
|
||||||
while (ctx->region_list) {
|
|
||||||
region = ctx->region_list;
|
|
||||||
|
|
||||||
ctx->region_list = region->next;
|
|
||||||
|
|
||||||
delete_region_display_list(ctx, region);
|
|
||||||
av_free(region->pbuf);
|
|
||||||
av_free(region);
|
|
||||||
}
|
|
||||||
|
|
||||||
while (ctx->clut_list) {
|
while (ctx->clut_list) {
|
||||||
clut = ctx->clut_list;
|
clut = ctx->clut_list;
|
||||||
|
|
||||||
@ -343,12 +332,35 @@ static void delete_state(DVBSubContext *ctx)
|
|||||||
|
|
||||||
av_free(clut);
|
av_free(clut);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
av_freep(&ctx->display_definition);
|
static void delete_objects(DVBSubContext *ctx)
|
||||||
|
{
|
||||||
|
DVBSubObject *object;
|
||||||
|
|
||||||
/* Should already be null */
|
while (ctx->object_list) {
|
||||||
if (ctx->object_list)
|
object = ctx->object_list;
|
||||||
av_log(0, AV_LOG_ERROR, "Memory deallocation error!\n");
|
|
||||||
|
ctx->object_list = object->next;
|
||||||
|
|
||||||
|
av_free(object);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void delete_regions(DVBSubContext *ctx)
|
||||||
|
{
|
||||||
|
DVBSubRegion *region;
|
||||||
|
|
||||||
|
while (ctx->region_list) {
|
||||||
|
region = ctx->region_list;
|
||||||
|
|
||||||
|
ctx->region_list = region->next;
|
||||||
|
|
||||||
|
delete_region_display_list(ctx, region);
|
||||||
|
|
||||||
|
av_free(region->pbuf);
|
||||||
|
av_free(region);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static av_cold int dvbsub_init_decoder(AVCodecContext *avctx)
|
static av_cold int dvbsub_init_decoder(AVCodecContext *avctx)
|
||||||
@ -433,7 +445,13 @@ static av_cold int dvbsub_close_decoder(AVCodecContext *avctx)
|
|||||||
DVBSubContext *ctx = avctx->priv_data;
|
DVBSubContext *ctx = avctx->priv_data;
|
||||||
DVBSubRegionDisplay *display;
|
DVBSubRegionDisplay *display;
|
||||||
|
|
||||||
delete_state(ctx);
|
delete_regions(ctx);
|
||||||
|
|
||||||
|
delete_objects(ctx);
|
||||||
|
|
||||||
|
delete_cluts(ctx);
|
||||||
|
|
||||||
|
av_freep(&ctx->display_definition);
|
||||||
|
|
||||||
while (ctx->display_list) {
|
while (ctx->display_list) {
|
||||||
display = ctx->display_list;
|
display = ctx->display_list;
|
||||||
@ -1125,7 +1143,9 @@ static void dvbsub_parse_page_segment(AVCodecContext *avctx,
|
|||||||
av_dlog(avctx, "Page time out %ds, state %d\n", ctx->time_out, page_state);
|
av_dlog(avctx, "Page time out %ds, state %d\n", ctx->time_out, page_state);
|
||||||
|
|
||||||
if (page_state == 2) {
|
if (page_state == 2) {
|
||||||
delete_state(ctx);
|
delete_regions(ctx);
|
||||||
|
delete_objects(ctx);
|
||||||
|
delete_cluts(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp_display_list = ctx->display_list;
|
tmp_display_list = ctx->display_list;
|
||||||
|
Loading…
Reference in New Issue
Block a user