From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 524FB44748 for ; Tue, 25 Oct 2022 09:18:54 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F3F6568BE11; Tue, 25 Oct 2022 12:18:09 +0300 (EEST) Received: from mx.sdf.org (mx.sdf.org [205.166.94.24]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1CA4A68BB85 for ; Tue, 25 Oct 2022 12:18:07 +0300 (EEST) Received: from af9afacccd12efa27dd4f88628453234 ([1.145.236.2]) (authenticated (0 bits)) by mx.sdf.org (8.15.2/8.14.5) with ESMTPSA id 29P9I1SO027452 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits) verified NO) for ; Tue, 25 Oct 2022 09:18:05 GMT Date: Tue, 25 Oct 2022 20:17:57 +1100 From: Peter Ross To: ffmpeg-devel@ffmpeg.org Message-ID: <3c00b3c1b7da699e821ce08a347feb8e4f22a7c8.1666689283.git.pross@xvid.org> References: <4d64fe7e88a98a833ec603e1a21b8b90fb9ed1a4.1666689283.git.pross@xvid.org> MIME-Version: 1.0 In-Reply-To: <4d64fe7e88a98a833ec603e1a21b8b90fb9ed1a4.1666689283.git.pross@xvid.org> Subject: [FFmpeg-devel] [PATCHv3 4/4] avcodec/svq1dec: detect buggy FFmpeg encoder and apply correction to interframe mean symbols 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 Content-Type: multipart/mixed; boundary="===============1207337832344809430==" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --===============1207337832344809430== Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="u4bR2b74Wt7hUb83" Content-Disposition: inline --u4bR2b74Wt7hUb83 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable --- libavcodec/svq1dec.c | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/libavcodec/svq1dec.c b/libavcodec/svq1dec.c index 828b38b93d..c7269456e2 100644 --- a/libavcodec/svq1dec.c +++ b/libavcodec/svq1dec.c @@ -73,6 +73,8 @@ typedef struct SVQ1Context { int height; int frame_code; int nonref; // 1 if the current frame won't be referenced + + int last_tempref; } SVQ1Context; =20 static const uint8_t string_table[256] =3D { @@ -229,7 +231,7 @@ static int svq1_decode_block_intra(GetBitContext *bitbu= f, uint8_t *pixels, } =20 static int svq1_decode_block_non_intra(GetBitContext *bitbuf, uint8_t *pix= els, - ptrdiff_t pitch) + ptrdiff_t pitch, int buggy) { uint32_t bit_cache; uint8_t *list[63]; @@ -270,6 +272,13 @@ static int svq1_decode_block_non_intra(GetBitContext *= bitbuf, uint8_t *pixels, =20 mean =3D get_vlc2(bitbuf, svq1_inter_mean.table, 9, 3) - 256; =20 + if (buggy) { + if (mean =3D=3D -128) + mean =3D 128; + else if (mean =3D=3D 128) + mean =3D -128; + } + SVQ1_CALC_CODEBOOK_ENTRIES(ff_svq1_inter_codebooks); =20 for (y =3D 0; y < height; y++) { @@ -455,7 +464,7 @@ static int svq1_decode_delta_block(AVCodecContext *avct= x, HpelDSPContext *hdsp, GetBitContext *bitbuf, uint8_t *current, uint8_t *previous, ptrdiff_t pitch, svq1_pmv *motion, int = x, int y, - int width, int height) + int width, int height, int buggy) { uint32_t block_type; int result =3D 0; @@ -487,7 +496,7 @@ static int svq1_decode_delta_block(AVCodecContext *avct= x, HpelDSPContext *hdsp, ff_dlog(avctx, "Error in svq1_motion_inter_block %i\n", result= ); break; } - result =3D svq1_decode_block_non_intra(bitbuf, current, pitch); + result =3D svq1_decode_block_non_intra(bitbuf, current, pitch, bug= gy); break; =20 case SVQ1_BLOCK_INTER_4V: @@ -498,7 +507,7 @@ static int svq1_decode_delta_block(AVCodecContext *avct= x, HpelDSPContext *hdsp, ff_dlog(avctx, "Error in svq1_motion_inter_4v_block %i\n", res= ult); break; } - result =3D svq1_decode_block_non_intra(bitbuf, current, pitch); + result =3D svq1_decode_block_non_intra(bitbuf, current, pitch, bug= gy); break; =20 case SVQ1_BLOCK_INTRA: @@ -524,15 +533,18 @@ static void svq1_parse_string(GetBitContext *bitbuf, = uint8_t out[257]) out[i] =3D 0; } =20 -static int svq1_decode_frame_header(AVCodecContext *avctx, AVFrame *frame) +static int svq1_decode_frame_header(AVCodecContext *avctx, AVFrame *frame,= int * buggy) { SVQ1Context *s =3D avctx->priv_data; GetBitContext *bitbuf =3D &s->gb; int frame_size_code; int width =3D s->width; int height =3D s->height; + int tempref; =20 - skip_bits(bitbuf, 8); /* temporal_reference */ + tempref =3D get_bits(bitbuf, 8); /* temporal_reference */ + *buggy =3D tempref =3D=3D 0 && s->last_tempref =3D=3D 0 && avctx->extr= adata_size =3D=3D 0; + s->last_tempref =3D tempref; =20 /* frame type */ s->nonref =3D 0; @@ -624,7 +636,7 @@ static int svq1_decode_frame(AVCodecContext *avctx, AVF= rame *cur, int buf_size =3D avpkt->size; SVQ1Context *s =3D avctx->priv_data; uint8_t *current; - int result, i, x, y, width, height; + int result, i, x, y, width, height, buggy; int ret; =20 /* initialize bit buffer */ @@ -664,7 +676,7 @@ static int svq1_decode_frame(AVCodecContext *avctx, AVF= rame *cur, src[i] =3D ((src[i] << 16) | (src[i] >> 16)) ^ src[7 - i]; } =20 - result =3D svq1_decode_frame_header(avctx, cur); + result =3D svq1_decode_frame_header(avctx, cur, &buggy); if (result !=3D 0) { ff_dlog(avctx, "Error in svq1_decode_frame_header %i\n", result); return result; @@ -734,7 +746,7 @@ static int svq1_decode_frame(AVCodecContext *avctx, AVF= rame *cur, result =3D svq1_decode_delta_block(avctx, &s->hdsp, &s->gb, ¤t[x], previous, linesize, - s->pmv, x, y, width, = height); + s->pmv, x, y, width, = height, buggy); if (result !=3D 0) { ff_dlog(avctx, "Error in svq1_decode_delta_block %i\n", @@ -820,6 +832,8 @@ static av_cold int svq1_decode_init(AVCodecContext *avc= tx) =20 ff_thread_once(&init_static_once, svq1_static_init); =20 + s->last_tempref =3D 0xFF; + return 0; } =20 --=20 2.35.1 -- Peter (A907 E02F A6E5 0CD2 34CD 20D2 6760 79C5 AC40 DD6B) --u4bR2b74Wt7hUb83 Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iF0EABECAB0WIQSpB+AvpuUM0jTNINJnYHnFrEDdawUCY1epxQAKCRBnYHnFrEDd a07UAJ98rk1IizfCv0Kd/eFDZCeJx8GNjQCePVzYF08Z2cbO4dunhfkCoZopfo0= =OjkS -----END PGP SIGNATURE----- --u4bR2b74Wt7hUb83-- --===============1207337832344809430== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --===============1207337832344809430==--