mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-28 02:12:28 +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;
|
||||
|
||||
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) {
|
||||
clut = ctx->clut_list;
|
||||
|
||||
@ -343,12 +332,35 @@ static void delete_state(DVBSubContext *ctx)
|
||||
|
||||
av_free(clut);
|
||||
}
|
||||
}
|
||||
|
||||
av_freep(&ctx->display_definition);
|
||||
static void delete_objects(DVBSubContext *ctx)
|
||||
{
|
||||
DVBSubObject *object;
|
||||
|
||||
/* Should already be null */
|
||||
if (ctx->object_list)
|
||||
av_log(0, AV_LOG_ERROR, "Memory deallocation error!\n");
|
||||
while (ctx->object_list) {
|
||||
object = ctx->object_list;
|
||||
|
||||
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)
|
||||
@ -433,7 +445,13 @@ static av_cold int dvbsub_close_decoder(AVCodecContext *avctx)
|
||||
DVBSubContext *ctx = avctx->priv_data;
|
||||
DVBSubRegionDisplay *display;
|
||||
|
||||
delete_state(ctx);
|
||||
delete_regions(ctx);
|
||||
|
||||
delete_objects(ctx);
|
||||
|
||||
delete_cluts(ctx);
|
||||
|
||||
av_freep(&ctx->display_definition);
|
||||
|
||||
while (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);
|
||||
|
||||
if (page_state == 2) {
|
||||
delete_state(ctx);
|
||||
delete_regions(ctx);
|
||||
delete_objects(ctx);
|
||||
delete_cluts(ctx);
|
||||
}
|
||||
|
||||
tmp_display_list = ctx->display_list;
|
||||
|
Loading…
Reference in New Issue
Block a user