From patchwork Sat Nov 4 00:19:21 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 5852 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.90 with SMTP id m26csp452934jah; Fri, 3 Nov 2017 17:19:48 -0700 (PDT) X-Google-Smtp-Source: ABhQp+SmujoDQBzVYP87RNV63XnEBXNTDw4RbEmk/gr/jkjPOGj0pTKfRSyyVww3EtV31dHVkN2W X-Received: by 10.223.186.202 with SMTP id w10mr7775346wrg.132.1509754788078; Fri, 03 Nov 2017 17:19:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1509754788; cv=none; d=google.com; s=arc-20160816; b=vBLurhPj+AGhFVLoXn8Z7vk/tFow3IwL/FTmzD0tKhQcjqQEW15GZ7hG94e7DHQJKg q5Kyr7pcdosoteMdjt0XrZASUTETtMocIQdhuzhkS0uL9WeO++O3/rYdfAWpadOB/BnY yMD7H1AhXYJ9ssKjl1jXUCeXtnKGtRBDGCeg7qPwWO3e+vl7Rdq5hiUGY2Gk+j1Ynr+z Nxx0aGsRcTsH6sKFEkHkm+3L2peZkKx/hsSot6BqYEVfjkOics1QpYYcJwIfHndrI/Gs D82OkHqFyhLPjEh+XsX4fVgRoZYu/Oz/FDXYr0Wl+sFAQwN2YRBChpT7C0Hn2LrPs5KZ Ka7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:delivered-to:arc-authentication-results; bh=4K1WJgm461fiQSYEdT+ZjDhcwp9YdAYFqi0sZyPMh2Y=; b=DvnQ7Uf3UeFadZktQjExqrAoqCymE8pyxSGqedr8PQnPa3pnFpFs8HU2QjgPwOFrPY Mxc1hcvVUU5Ujoi1KrgflFGtncTnHgr3Kj+Kk3IAVVZzXuxJGWu43hW0fWnWIgs02Iim pIzk0HzZlyituSJi06Yg6o4bdbon3qL99vxHYQzvUSuHZbEvp5p8SbO9gAwGE6KGLWP0 VFdquZWpAdEG7+4I5xnsKOLq4ifxmAJNf7IOzXOnAPPrSatQd/3D68y7o650bBqNdGr4 RhICDterWQuHt3sAp6MLF5jGiWyuiFIeYBEUglTeO0MmqJyE6VhLw8kl427+gBirLKwv 25Cw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id p69si2839288wmf.172.2017.11.03.17.19.47; Fri, 03 Nov 2017 17:19:48 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D4153689F03; Sat, 4 Nov 2017 02:19:28 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from vie01a-dmta-pe01-3.mx.upcmail.net (vie01a-dmta-pe01-3.mx.upcmail.net [62.179.121.156]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 03D88689E2E for ; Sat, 4 Nov 2017 02:19:22 +0200 (EET) Received: from [172.31.216.43] (helo=vie01a-pemc-psmtp-pe01) by vie01a-dmta-pe01.mx.upcmail.net with esmtp (Exim 4.88) (envelope-from ) id 1eAmBQ-0003II-S6 for ffmpeg-devel@ffmpeg.org; Sat, 04 Nov 2017 01:19:32 +0100 Received: from localhost ([213.47.41.20]) by vie01a-pemc-psmtp-pe01 with SMTP @ mailcloud.upcmail.net id VcKQ1w00t0S5wYM01cKRSV; Sat, 04 Nov 2017 01:19:25 +0100 X-SourceIP: 213.47.41.20 From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Sat, 4 Nov 2017 01:19:21 +0100 Message-Id: <20171104001921.24006-3-michael@niedermayer.cc> X-Mailer: git-send-email 2.15.0 In-Reply-To: <20171104001921.24006-1-michael@niedermayer.cc> References: <20171104001921.24006-1-michael@niedermayer.cc> Subject: [FFmpeg-devel] [PATCH 3/3] avcodec/dvbsubdec: Avoid re-computing clut X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Fixes: Timeout Fixes: 3218/clusterfuzz-testcase-5390672154591232 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer --- libavcodec/dvbsubdec.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/libavcodec/dvbsubdec.c b/libavcodec/dvbsubdec.c index 85a59f3ced..c60aa9a34d 100644 --- a/libavcodec/dvbsubdec.c +++ b/libavcodec/dvbsubdec.c @@ -96,6 +96,9 @@ typedef struct DVBSubRegion { int clut; int bgcolor; + uint8_t computed_clut[4*256]; + int has_computed_clut; + uint8_t *pbuf; int buf_size; int dirty; @@ -647,7 +650,7 @@ static int dvbsub_read_8bit_string(AVCodecContext *avctx, return pixels_read; } -static void compute_default_clut(AVSubtitleRect *rect, int w, int h) +static void compute_default_clut(uint8_t *clut, AVSubtitleRect *rect, int w, int h) { uint8_t list[256] = {0}; uint8_t list_inv[256]; @@ -703,7 +706,7 @@ static void compute_default_clut(AVSubtitleRect *rect, int w, int h) count = FFMAX(i - 1, 1); for (i--; i>=0; i--) { int v = i*255/count; - AV_WN32(rect->data[1] + 4*list_inv[i], RGBA(v/2,v,v/2,v)); + AV_WN32(clut + 4*list_inv[i], RGBA(v/2,v,v/2,v)); } } @@ -809,8 +812,14 @@ static int save_subtitle_set(AVCodecContext *avctx, AVSubtitle *sub, int *got_ou memcpy(rect->data[0], region->pbuf, region->buf_size); - if ((clut == &default_clut && ctx->compute_clut == -1) || ctx->compute_clut == 1) - compute_default_clut(rect, rect->w, rect->h); + if ((clut == &default_clut && ctx->compute_clut == -1) || ctx->compute_clut == 1) { + if (!region->has_computed_clut) { + compute_default_clut(region->computed_clut, rect, rect->w, rect->h); + region->has_computed_clut = 1; + } + + memcpy(rect->data[1], region->computed_clut, sizeof(region->computed_clut)); + } #if FF_API_AVPICTURE FF_DISABLE_DEPRECATION_WARNINGS @@ -959,6 +968,7 @@ static void dvbsub_parse_pixel_data_block(AVCodecContext *avctx, DVBSubObjectDis } } + region->has_computed_clut = 0; } static int dvbsub_parse_object_segment(AVCodecContext *avctx,