From patchwork Sun Nov 6 16:30:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 39210 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp1637505pzb; Sun, 6 Nov 2022 08:31:36 -0800 (PST) X-Google-Smtp-Source: AMsMyM5i9RkM8k8eGBh5akZjD8AYnLZHsB4QgiI6Xd4CiC2mKKTDgXooKVMuVa+RJjPvC1BTbjwR X-Received: by 2002:a17:907:2bd5:b0:76f:591c:466b with SMTP id gv21-20020a1709072bd500b0076f591c466bmr42416588ejc.504.1667752296788; Sun, 06 Nov 2022 08:31:36 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id l12-20020a170906794c00b007adb80fc5d0si7165803ejo.461.2022.11.06.08.31.36; Sun, 06 Nov 2022 08:31:36 -0800 (PST) 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; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=DgKHzKqc; arc=fail (body hash mismatch); 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4B51568B9A9; Sun, 6 Nov 2022 18:31:26 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR02-AM0-obe.outbound.protection.outlook.com (mail-am0eur02olkn2036.outbound.protection.outlook.com [40.92.49.36]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A76E468B896 for ; Sun, 6 Nov 2022 18:31:23 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=R7fF2IALcVXzXX32uXMmX70YJ634cP6EBF8/exLd67xWjIa+nMAVRTxqGTSei2heTLOZHrdq7G8kL0KzzaQZrYeMDzZkH/ScmuYtgDKuh0/NxydwT0HcrvEwgvpUYp9weAMQgFvBuBOLFa4qfd2RbHblalnlnxH8LyAcA5Zb6svMcj6OFceOlf8T47RaPPluXwdp8ryOiEPryC01jeK67kLCW4cOA+PVg07UA2gg4axpLMjDePlVt06cr8wPDnFrODHzSUFbZyFIQoEJqJyuYKy4wAL3LPGArMKA++9rZWfrcRF1GwmQOaNg3U60Is4Yyti8ozFgff3bnF3TZ7Lluw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=f0ZBY9mtCRN7ilCC48biQP9Ws/h9JED4TvxYzs2MqwM=; b=PJDWLlGz8Bv81qM+pQb6UzqIZ2qOiiZtixDsB7u61D5VyaiqL/HXxL8Hq3gCdWzwbHkb9A1roghaRbflBhnz5NAHhE/vjs7obWAsbz6old9r4gVQFsnrIZ3yAPlxwT5WSDgqdrJ+zzKJD5ILI57CuOcxXidyP2t+Dloda5aBMOLIcb2apZumnyHSmxib+ynn/3JF6Ge+4Hu/Qpr9PHslB6cVm3iU2otZ1nPJtxHEtSwVhFjIeGYC4JkPSIuogsmSg/WJlyyOLrV2Gu6lTqhZIYFe62csbJIiJBYeLtB/viWp0rUVfYFHymSqYBXezfVwaZOZlP5rU1VDHIb8ev28ww== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=f0ZBY9mtCRN7ilCC48biQP9Ws/h9JED4TvxYzs2MqwM=; b=DgKHzKqcwsIMdNaDeZlefBJqgHiUuDDwE34ebfIwkRPawIlEcPXUqfwm83YElp+MLp9xDEsKIE3j/05SEqb6/SPROvy2S3e/3bjEqLuG4kQ4KLDXiBPjyktp+Dh7yfCvAMVQi/G/dkGV000haJH8cHrzEWmvhjuhjqjAg/EslRt5P/8Sg8IQDWXYJYV8QoqyA0Qa801eMzn8xqTGh4Dd5YPEV54/IEo+xT896TTtsJV6L/iRnKxrV8fB/INtmLWLcjd4s66UR2iq96cgEMtKZbZCQDTqdyFI12i9EpHkh+2pWc9dSQRrYfrOJ0L2vkeHlAaYZ0KMGy0gOIjB6PbG3Q== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by AS8P250MB0791.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:570::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5791.25; Sun, 6 Nov 2022 16:31:19 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::c323:d08c:85d0:dafe]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::c323:d08c:85d0:dafe%4]) with mapi id 15.20.5791.026; Sun, 6 Nov 2022 16:31:19 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 6 Nov 2022 17:30:58 +0100 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [qcBS0W/p/b51m2qNaAcrNO4zskQooQSnNVBSmuXaJco=] X-ClientProxiedBy: AM6P191CA0102.EURP191.PROD.OUTLOOK.COM (2603:10a6:209:8a::43) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20221106163101.1141408-3-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|AS8P250MB0791:EE_ X-MS-Office365-Filtering-Correlation-Id: 4892b172-1c16-4d8d-4889-08dac0145567 X-MS-Exchange-SLBlob-MailProps: AZnQBsB9XmqxUC2t/XAH2JXAVSoE8CDQc4VA3QELjK3PlIcTpdozamCfLcbMkXuGI1RO71XmFu7bLxZZJN2iwCYY0/vURypyysOvO71zmgYkywOwr/IDPbx7/wDkqo/s+Qo28aSDjgII6mGx1sSSniZGv/ef6i3N6/7QVcXgjBLTpnoryID3iFiXDMHCknJO5HoHejDS0HTgaSTOndV+oc/EKRkPTBgZybml3Jt59wYAWljeZKIY/ox0eAsetDzYdHj6SL/4IFh+AdKnKM4h7AwLVDsuhmjuEUL97B1tzYqDvxZgxDWz3gb1uDStaMVwzEX5Feepe428kmGnMez4VSDno6zBZSHy7EKpKjIwTauXg9cdu10/Dx5kkwH6D9A2N9ckaDJowJsLA4PmQP4mZ6fuh0axy+LAKOvHUn9xwO+rLiuLjmw8lLby+BT+pVA+oT+wUomCtzqlflm6hL5egWgDyJSHIJ9VThwAu7XzVloaSXJ7P7VtRQ3ppHMq3vRJ76CDCzxyosa1fZr/sZjYE1Fsx2UYgMnu5fMp96Q3qQKmhFzuN5hCy7wCOu5/nG5Sk7xAi06nI1RNebkQeVYQH7T0We7/pSjgGBixKbUr3BPz1t6Ctg9Z3BoJV6WcNYzt5N9sLLHTrY09kliAayJKCdNbXsFYQHn1OcZskxKL/ZYuZ3hX1pHbN3WLaexOFUdixeyudw7SjdlXbzUTs4orcSdSpVzagN+Z08VZCrnJucXHx/M1KZoj6tVep7aGNfMl+/By+EsP5q0= X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: iHxpNcNFIdR8lRIpo6K/n3BtiqaW793TyFnF6v5H/4YFrOwuoHEAsNJ7owN3outT+qhjYDDG/XULy1MEffNV8j8jkClhU8S1JKHtH/Icuz+wlQQ4PffPiOLqdodunV4PcWFPYQ+j+H2U03cgiBx5YS1anPwkwzXhBreqeDbaKQZp9OhdWAHkTzIgSAhRBRfKNOUvimfPKUB1lEA1Wlk64STXj0eUOjWbcV7xNFGi/SFA0StxQY1OYvJV8xZPZ2nAL3jlmOURNo0J86LZ/3+M+NQHUpI6lEJFMB6B7CqhcwS/F9YbpIrvFVk3QaaU2iWrIWjsvDKSRvoAKpnCK9/IZWtwagifZLJq9SH5LaVMl4zQMI0DVBl5UcOKxMW3/deFR8e8n+0Gg85RYJdaPdnLmiwXQWssosU1ARCsYZEWuhnCPpVyCdjKT1J8cfod++nzwICDwWZ7bzLejhRtNUd3bHTIXBg1jg4OpcCu0FDsTDtOnktJxk7Mm9buPE1xo4Ec0y5JI0kZ6LbAuAfbcN5mGBU3vMcnA+o7g4nfQVD6UewcV+pjQy27C8p5TpoPLlF4fNkVATGo4Qpl8cxDTa4yYVq1KRGmpA7Hk/23bj6amcudhzKJoRzkgvqG5hoGc7hiLuaDa764Iv6lpb0rkHrTtoCe+kd0R2FC/c+9y5ElrNXEGXqB3+TpQZi3C6vA4Gaa X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Rv/Rdkmiydf+NyuDGBEGQlFOpMZQyUbEeKsPldqoW2OXOiYlKR8/9T8iV4opHID1/K5qBOHEpk4SKhePKFu0F8cvRjK+YgqgJyjqpQsGz/V8OW9dbxTsQyInSmXAoNjAvGkZwKH3ibYMauuxH71aplLbs0PvpNj6bbA338UNBSjeSfNw3uo7d2EoI2i22aqUXOtDWDAqvC1w3L9aTWTOTwnr4jZIGY/jc0BrayeNkGEKePlqyre8WEBRQ6OIE1lynFVY69mzBS2zSClEKEc00JQ/EDQK0MI5WC2Jp04y9+EcbWN3eHdgTPxnQUgXknT/H0Qfakls8767BSpi8ZgCLUKlyAow7kzi7ib/lZYYsOkIoWQN6XpicOd5+tj2RAuQwc211Id2KEDEA2KKhCTayiU/bphhzfkuxBc6FtTzBCSgrgldBWezX3zMfpIj3rfme+cmQ/GRnRorxKAqsKQt7+/7qH85dgxx5ar20K2/4mw3HXqJvfreTM7y1jIBqTXlrRCNw1kBcszr9mv/x8VxKICzpl3TILf5MYQH/lxlCSc+dvt+1e5iqcN9tMUYvrOqodU9sPdimT68Rkn3FMx2STB0QNZp3hFAS9YG1sGYpgAclhGKEnxsUF8Ccq8FWMNLnTsh3sfp1jhvIw9R4F7YNdoyFIPjhbgQMbBh/MHmhUap+YvAKR4nAcg/lEuwZ1rTxuVAJQlu4vky0USYOKiQiVlXxWR/VdzS4ljIQ7x8MoElRV0Q4bh8Sw8YbrDvwyXfTn4p33Q9RXfx1wzJpJKeyLm1pI8TZy+XNeIzcwSmYxeA37+5gyI1q3Lr723BC+n6Ga9VhPvSV8P06CyrTQBmgfRTGA3KEyYm7QcE2HqKYibSenLAMXT8zqReYGUv+VTTieceCCe0tCgsb7xPLpjoPTGXOUO0P1QgFDieMA2eYuP+eLGiKdb8jR1QI3r9T3xcSZNZ/8U3kyuHKhb0DNs++MUPwVuZqBcNJRS8FWyAAd4biypJvup4G0liL7/VxJFamhy+ON9odqAJuekrR9naObN+2ZR2yI0LD9N6YfBnU+z2QvLwtIjpqMiZml3vSq2d0tn6/UxByDdCEq74G8QAVH0emQ4dqljfrJO3Qkt+TVcvzud5xc3UgN+fHbdJdCO2WkivCE5O6hdGOH08rGq3kn34cJ8/RAUV+sdGZRPqwoG/zPFg9MpK7a6c5YJWTvBeM2hHV8weXx3VtKThkrx/iqwYlVesKuvERW0AtKSvcWKtwzkqj6qEnM9UjozHZJlg/bs4y5jjMkgSXSExigAlD6eU6tSZprVHRItBjFdNliLsJ/PN8mO41a1lrxWnwSOK X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4892b172-1c16-4d8d-4889-08dac0145567 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2022 16:31:19.3100 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8P250MB0791 Subject: [FFmpeg-devel] [PATCH 4/7] postproc/postprocess_template: Fix alignment X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: VcOTcHTcQBkh postProcess in postprocess_template.c copies a PPContext to the stack, works with this copy and then copies it back again. Said local copy uses a hardcoded alignment of eight, although PPContext has alignment 32 since cbe27006cee0099076d1d68af646f3ef914167d8 (this commit was in anticipation of AVX2 code that never landed). This leads to misalignment in the filter-(pp|pp1|pp2|pp3|qp) FATE-tests which UBSan complains about. So avoid the local copy. Signed-off-by: Andreas Rheinhardt --- libpostproc/postprocess_template.c | 156 ++++++++++++++--------------- 1 file changed, 77 insertions(+), 79 deletions(-) diff --git a/libpostproc/postprocess_template.c b/libpostproc/postprocess_template.c index bcf7bdad66..ade1d6ce2b 100644 --- a/libpostproc/postprocess_template.c +++ b/libpostproc/postprocess_template.c @@ -2860,14 +2860,13 @@ static inline void RENAME(prefetcht2)(const void *p) * Filter array of bytes (Y or U or V values) */ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[], int dstStride, int width, int height, - const int8_t QPs[], int QPStride, int isColor, PPContext *c2) + const int8_t QPs[], int QPStride, int isColor, PPContext *c) { - DECLARE_ALIGNED(8, PPContext, c)= *c2; //copy to stack for faster access int x,y; #ifdef TEMPLATE_PP_TIME_MODE const int mode= TEMPLATE_PP_TIME_MODE; #else - const int mode= isColor ? c.ppMode.chromMode : c.ppMode.lumMode; + const int mode = isColor ? c->ppMode.chromMode : c->ppMode.lumMode; #endif int black=0, white=255; // blackest black and whitest white in the picture int QPCorrecture= 256*256; @@ -2877,29 +2876,29 @@ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[ int i; #endif - const int qpHShift= isColor ? 4-c.hChromaSubSample : 4; - const int qpVShift= isColor ? 4-c.vChromaSubSample : 4; + const int qpHShift = isColor ? 4 - c->hChromaSubSample : 4; + const int qpVShift = isColor ? 4 - c->vChromaSubSample : 4; //FIXME remove - uint64_t * const yHistogram= c.yHistogram; - uint8_t * const tempSrc= srcStride > 0 ? c.tempSrc : c.tempSrc - 23*srcStride; - uint8_t * const tempDst= (dstStride > 0 ? c.tempDst : c.tempDst - 23*dstStride) + 32; + uint64_t * const yHistogram= c->yHistogram; + uint8_t * const tempSrc = srcStride > 0 ? c->tempSrc : c->tempSrc - 23*srcStride; + uint8_t * const tempDst = (dstStride > 0 ? c->tempDst : c->tempDst - 23*dstStride) + 32; //const int mbWidth= isColor ? (width+7)>>3 : (width+15)>>4; if (mode & VISUALIZE){ if(!(mode & (V_A_DEBLOCK | H_A_DEBLOCK)) || TEMPLATE_PP_MMX) { - av_log(c2, AV_LOG_WARNING, "Visualization is currently only supported with the accurate deblock filter without SIMD\n"); + av_log(c, AV_LOG_WARNING, "Visualization is currently only supported with the accurate deblock filter without SIMD\n"); } } #if TEMPLATE_PP_MMX for(i=0; i<57; i++){ - int offset= ((i*c.ppMode.baseDcDiff)>>8) + 1; + int offset = ((i * c->ppMode.baseDcDiff) >> 8) + 1; int threshold= offset*2 + 1; - c.mmxDcOffset[i]= 0x7F - offset; - c.mmxDcThreshold[i]= 0x7F - threshold; - c.mmxDcOffset[i]*= 0x0101010101010101LL; - c.mmxDcThreshold[i]*= 0x0101010101010101LL; + c->mmxDcOffset[i] = 0x7F - offset; + c->mmxDcThreshold[i] = 0x7F - threshold; + c->mmxDcOffset[i] *= 0x0101010101010101LL; + c->mmxDcThreshold[i] *= 0x0101010101010101LL; } #endif @@ -2925,16 +2924,18 @@ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[ uint64_t clipped; AVRational scale; - c.frameNum++; + c->frameNum++; // first frame is fscked so we ignore it - if(c.frameNum == 1) yHistogram[0]= width*(uint64_t)height/64*15/256; + if (c->frameNum == 1) + yHistogram[0] = width * (uint64_t)height/64*15/256; for(i=0; i<256; i++){ sum+= yHistogram[i]; } /* We always get a completely black picture first. */ - maxClipped= av_rescale(sum, c.ppMode.maxClippedThreshold.num, c.ppMode.maxClippedThreshold.den); + maxClipped = av_rescale(sum, c->ppMode.maxClippedThreshold.num, + c->ppMode.maxClippedThreshold.den); clipped= sum; for(black=255; black>0; black--){ @@ -2948,27 +2949,27 @@ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[ clipped-= yHistogram[white]; } - scale = (AVRational){c.ppMode.maxAllowedY - c.ppMode.minAllowedY, white - black}; + scale = (AVRational){c->ppMode.maxAllowedY - c->ppMode.minAllowedY, white - black}; #if TEMPLATE_PP_MMXEXT - c.packedYScale = (uint16_t)av_rescale(scale.num, 256, scale.den); - c.packedYOffset= (((black*c.packedYScale)>>8) - c.ppMode.minAllowedY) & 0xFFFF; + c->packedYScale = (uint16_t)av_rescale(scale.num, 256, scale.den); + c->packedYOffset = (((black*c->packedYScale)>>8) - c->ppMode.minAllowedY) & 0xFFFF; #else - c.packedYScale = (uint16_t)av_rescale(scale.num, 1024, scale.den); - c.packedYOffset= (black - c.ppMode.minAllowedY) & 0xFFFF; + c->packedYScale = (uint16_t)av_rescale(scale.num, 1024, scale.den); + c->packedYOffset = (black - c->ppMode.minAllowedY) & 0xFFFF; #endif - c.packedYOffset|= c.packedYOffset<<32; - c.packedYOffset|= c.packedYOffset<<16; + c->packedYOffset |= c->packedYOffset<<32; + c->packedYOffset |= c->packedYOffset<<16; - c.packedYScale|= c.packedYScale<<32; - c.packedYScale|= c.packedYScale<<16; + c->packedYScale |= c->packedYScale<<32; + c->packedYScale |= c->packedYScale<<16; if(mode & LEVEL_FIX) QPCorrecture= (int)av_rescale(scale.num, 256*256, scale.den); else QPCorrecture= 256*256; }else{ - c.packedYScale= 0x0100010001000100LL; - c.packedYOffset= 0; + c->packedYScale = 0x0100010001000100LL; + c->packedYOffset = 0; QPCorrecture= 256*256; } @@ -2988,22 +2989,22 @@ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[ RENAME(prefetcht0)(dstBlock + (((x>>2)&6) + copyAhead+1)*dstStride + 32); RENAME(blockCopy)(dstBlock + dstStride*8, dstStride, - srcBlock + srcStride*8, srcStride, mode & LEVEL_FIX, &c.packedYOffset); + srcBlock + srcStride*8, srcStride, mode & LEVEL_FIX, &c->packedYOffset); RENAME(duplicate)(dstBlock + dstStride*8, dstStride); if(mode & LINEAR_IPOL_DEINT_FILTER) RENAME(deInterlaceInterpolateLinear)(dstBlock, dstStride); else if(mode & LINEAR_BLEND_DEINT_FILTER) - RENAME(deInterlaceBlendLinear)(dstBlock, dstStride, c.deintTemp + x); + RENAME(deInterlaceBlendLinear)(dstBlock, dstStride, c->deintTemp + x); else if(mode & MEDIAN_DEINT_FILTER) RENAME(deInterlaceMedian)(dstBlock, dstStride); else if(mode & CUBIC_IPOL_DEINT_FILTER) RENAME(deInterlaceInterpolateCubic)(dstBlock, dstStride); else if(mode & FFMPEG_DEINT_FILTER) - RENAME(deInterlaceFF)(dstBlock, dstStride, c.deintTemp + x); + RENAME(deInterlaceFF)(dstBlock, dstStride, c->deintTemp + x); else if(mode & LOWPASS5_DEINT_FILTER) - RENAME(deInterlaceL5)(dstBlock, dstStride, c.deintTemp + x, c.deintTemp + width + x); + RENAME(deInterlaceL5)(dstBlock, dstStride, c->deintTemp + x, c->deintTemp + width + x); /* else if(mode & CUBIC_BLEND_DEINT_FILTER) RENAME(deInterlaceBlendCubic)(dstBlock, dstStride); */ @@ -3025,11 +3026,11 @@ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[ const uint8_t *srcBlock= &(src[y*srcStride]); uint8_t *dstBlock= &(dst[y*dstStride]); #if TEMPLATE_PP_MMX - uint8_t *tempBlock1= c.tempBlocks; - uint8_t *tempBlock2= c.tempBlocks + 8; + uint8_t *tempBlock1 = c->tempBlocks; + uint8_t *tempBlock2 = c->tempBlocks + 8; #endif const int8_t *QPptr= &QPs[(y>>qpVShift)*QPStride]; - int8_t *nonBQPptr= &c.nonBQPTable[(y>>qpVShift)*FFABS(QPStride)]; + int8_t *nonBQPptr = &c->nonBQPTable[(y>>qpVShift)*FFABS(QPStride)]; int QP=0, nonBQP=0; /* can we mess with a 8x16 block from srcBlock/dstBlock downwards and 1 line upwards if not than use a temporary buffer */ @@ -3072,8 +3073,8 @@ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[ nonBQP= (nonBQP* QPCorrecture + 256*128)>>16; yHistogram[(srcBlock+qp_index*8)[srcStride*12 + 4]]++; } - c.QP_block[qp_index] = QP; - c.nonBQP_block[qp_index] = nonBQP; + c->QP_block[qp_index] = QP; + c->nonBQP_block[qp_index] = nonBQP; #if TEMPLATE_PP_MMX __asm__ volatile( "movd %1, %%mm7 \n\t" @@ -3081,7 +3082,7 @@ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[ "packuswb %%mm7, %%mm7 \n\t" // 0,QP, 0, QP, 0,QP, 0, QP "packuswb %%mm7, %%mm7 \n\t" // QP,..., QP "movq %%mm7, %0 \n\t" - : "=m" (c.pQPb_block[qp_index]) + : "=m" (c->pQPb_block[qp_index]) : "r" (QP) ); #endif @@ -3093,20 +3094,20 @@ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[ RENAME(prefetcht0)(dstBlock + (((x>>2)&6) + copyAhead+1)*dstStride + 32); RENAME(blockCopy)(dstBlock + dstStride*copyAhead, dstStride, - srcBlock + srcStride*copyAhead, srcStride, mode & LEVEL_FIX, &c.packedYOffset); + srcBlock + srcStride*copyAhead, srcStride, mode & LEVEL_FIX, &c->packedYOffset); if(mode & LINEAR_IPOL_DEINT_FILTER) RENAME(deInterlaceInterpolateLinear)(dstBlock, dstStride); else if(mode & LINEAR_BLEND_DEINT_FILTER) - RENAME(deInterlaceBlendLinear)(dstBlock, dstStride, c.deintTemp + x); + RENAME(deInterlaceBlendLinear)(dstBlock, dstStride, c->deintTemp + x); else if(mode & MEDIAN_DEINT_FILTER) RENAME(deInterlaceMedian)(dstBlock, dstStride); else if(mode & CUBIC_IPOL_DEINT_FILTER) RENAME(deInterlaceInterpolateCubic)(dstBlock, dstStride); else if(mode & FFMPEG_DEINT_FILTER) - RENAME(deInterlaceFF)(dstBlock, dstStride, c.deintTemp + x); + RENAME(deInterlaceFF)(dstBlock, dstStride, c->deintTemp + x); else if(mode & LOWPASS5_DEINT_FILTER) - RENAME(deInterlaceL5)(dstBlock, dstStride, c.deintTemp + x, c.deintTemp + width + x); + RENAME(deInterlaceL5)(dstBlock, dstStride, c->deintTemp + x, c->deintTemp + width + x); /* else if(mode & CUBIC_BLEND_DEINT_FILTER) RENAME(deInterlaceBlendCubic)(dstBlock, dstStride); */ @@ -3121,24 +3122,24 @@ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[ const int stride= dstStride; //temporary while changing QP stuff to make things continue to work //eventually QP,nonBQP,etc will be arrays and this will be unnecessary - c.QP = c.QP_block[qp_index]; - c.nonBQP = c.nonBQP_block[qp_index]; - c.pQPb = c.pQPb_block[qp_index]; - c.pQPb2 = c.pQPb2_block[qp_index]; + c->QP = c->QP_block[qp_index]; + c->nonBQP = c->nonBQP_block[qp_index]; + c->pQPb = c->pQPb_block[qp_index]; + c->pQPb2 = c->pQPb2_block[qp_index]; /* only deblock if we have 2 blocks */ if(y + 8 < height){ if(mode & V_X1_FILTER) - RENAME(vertX1Filter)(dstBlock, stride, &c); + RENAME(vertX1Filter)(dstBlock, stride, c); else if(mode & V_DEBLOCK){ - const int t= RENAME(vertClassify)(dstBlock, stride, &c); + const int t = RENAME(vertClassify)(dstBlock, stride, c); if(t==1) - RENAME(doVertLowPass)(dstBlock, stride, &c); + RENAME(doVertLowPass)(dstBlock, stride, c); else if(t==2) - RENAME(doVertDefFilter)(dstBlock, stride, &c); + RENAME(doVertDefFilter)(dstBlock, stride, c); }else if(mode & V_A_DEBLOCK){ - RENAME(do_a_deblock)(dstBlock, stride, 1, &c, mode); + RENAME(do_a_deblock)(dstBlock, stride, 1, c, mode); } } @@ -3151,10 +3152,10 @@ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[ for(x = startx, qp_index=0; x < endx; x+=BLOCK_SIZE, qp_index++){ const int stride= dstStride; - c.QP = c.QP_block[qp_index]; - c.nonBQP = c.nonBQP_block[qp_index]; - c.pQPb = c.pQPb_block[qp_index]; - c.pQPb2 = c.pQPb2_block[qp_index]; + c->QP = c->QP_block[qp_index]; + c->nonBQP = c->nonBQP_block[qp_index]; + c->pQPb = c->pQPb_block[qp_index]; + c->pQPb2 = c->pQPb2_block[qp_index]; #if TEMPLATE_PP_MMX RENAME(transpose1)(tempBlock1, tempBlock2, dstBlock, dstStride); #endif @@ -3162,60 +3163,60 @@ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[ if(x - 8 >= 0){ #if TEMPLATE_PP_MMX if(mode & H_X1_FILTER) - RENAME(vertX1Filter)(tempBlock1, 16, &c); + RENAME(vertX1Filter)(tempBlock1, 16, c); else if(mode & H_DEBLOCK){ - const int t= RENAME(vertClassify)(tempBlock1, 16, &c); + const int t= RENAME(vertClassify)(tempBlock1, 16, c); if(t==1) - RENAME(doVertLowPass)(tempBlock1, 16, &c); + RENAME(doVertLowPass)(tempBlock1, 16, c); else if(t==2) - RENAME(doVertDefFilter)(tempBlock1, 16, &c); + RENAME(doVertDefFilter)(tempBlock1, 16, c); }else if(mode & H_A_DEBLOCK){ - RENAME(do_a_deblock)(tempBlock1, 16, 1, &c, mode); + RENAME(do_a_deblock)(tempBlock1, 16, 1, c, mode); } RENAME(transpose2)(dstBlock-4, dstStride, tempBlock1 + 4*16); #else if(mode & H_X1_FILTER) - horizX1Filter(dstBlock-4, stride, c.QP); + horizX1Filter(dstBlock-4, stride, c->QP); else if(mode & H_DEBLOCK){ #if TEMPLATE_PP_ALTIVEC DECLARE_ALIGNED(16, unsigned char, tempBlock)[272]; int t; transpose_16x8_char_toPackedAlign_altivec(tempBlock, dstBlock - (4 + 1), stride); - t = vertClassify_altivec(tempBlock-48, 16, &c); + t = vertClassify_altivec(tempBlock-48, 16, c); if(t==1) { - doVertLowPass_altivec(tempBlock-48, 16, &c); + doVertLowPass_altivec(tempBlock-48, 16, c); transpose_8x16_char_fromPackedAlign_altivec(dstBlock - (4 + 1), tempBlock, stride); } else if(t==2) { - doVertDefFilter_altivec(tempBlock-48, 16, &c); + doVertDefFilter_altivec(tempBlock-48, 16, c); transpose_8x16_char_fromPackedAlign_altivec(dstBlock - (4 + 1), tempBlock, stride); } #else - const int t= RENAME(horizClassify)(dstBlock-4, stride, &c); + const int t= RENAME(horizClassify)(dstBlock-4, stride, c); if(t==1) - RENAME(doHorizLowPass)(dstBlock-4, stride, &c); + RENAME(doHorizLowPass)(dstBlock-4, stride, c); else if(t==2) - RENAME(doHorizDefFilter)(dstBlock-4, stride, &c); + RENAME(doHorizDefFilter)(dstBlock-4, stride, c); #endif }else if(mode & H_A_DEBLOCK){ - RENAME(do_a_deblock)(dstBlock-8, 1, stride, &c, mode); + RENAME(do_a_deblock)(dstBlock-8, 1, stride, c, mode); } #endif //TEMPLATE_PP_MMX if(mode & DERING){ //FIXME filter first line - if(y>0) RENAME(dering)(dstBlock - stride - 8, stride, &c); + if(y>0) RENAME(dering)(dstBlock - stride - 8, stride, c); } if(mode & TEMP_NOISE_FILTER) { RENAME(tempNoiseReducer)(dstBlock-8, stride, - c.tempBlurred[isColor] + y*dstStride + x, - c.tempBlurredPast[isColor] + (y>>3)*256 + (x>>3) + 256, - c.ppMode.maxTmpNoise); + c->tempBlurred[isColor] + y*dstStride + x, + c->tempBlurredPast[isColor] + (y>>3)*256 + (x>>3) + 256, + c->ppMode.maxTmpNoise); } } @@ -3229,14 +3230,14 @@ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[ } if(mode & DERING){ - if(y > 0) RENAME(dering)(dstBlock - dstStride - 8, dstStride, &c); + if(y > 0) RENAME(dering)(dstBlock - dstStride - 8, dstStride, c); } if((mode & TEMP_NOISE_FILTER)){ RENAME(tempNoiseReducer)(dstBlock-8, dstStride, - c.tempBlurred[isColor] + y*dstStride + x, - c.tempBlurredPast[isColor] + (y>>3)*256 + (x>>3) + 256, - c.ppMode.maxTmpNoise); + c->tempBlurred[isColor] + y*dstStride + x, + c->tempBlurredPast[isColor] + (y>>3)*256 + (x>>3) + 256, + c->ppMode.maxTmpNoise); } /* did we use a tmp buffer for the last lines*/ @@ -3278,9 +3279,6 @@ static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[ } } #endif - - *c2= c; //copy local context back - } #undef RENAME