Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH] avcodec/on2avc: use correct fft sizes
@ 2023-08-06 12:42 Marton Balint
  2023-08-06 17:35 ` Lynne
  0 siblings, 1 reply; 5+ messages in thread
From: Marton Balint @ 2023-08-06 12:42 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Marton Balint

With the earlier patch this fixes the audio corruption regression caused by
6ba0aa1770ba29eb4126c6a706f6b0cd3809648f.

Fixes ticket #10029.

Signed-off-by: Marton Balint <cus@passwd.hu>
---
 libavcodec/on2avc.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/libavcodec/on2avc.c b/libavcodec/on2avc.c
index 474adb149d..0d0869bc9c 100644
--- a/libavcodec/on2avc.c
+++ b/libavcodec/on2avc.c
@@ -956,13 +956,13 @@ static av_cold int on2avc_decode_init(AVCodecContext *avctx)
     if ((ret = av_tx_init(&c->mdct_small, &c->mdct_small_fn, AV_TX_FLOAT_MDCT, 1, 128, &scale, 0)) < 0)
         return ret;
 
-    if ((ret = av_tx_init(&c->fft1024, &c->fft1024_fn, AV_TX_FLOAT_FFT, 1, 1024, NULL, 0)) < 0)
+    if ((ret = av_tx_init(&c->fft1024, &c->fft1024_fn, AV_TX_FLOAT_FFT, 1, 512, NULL, 0)) < 0)
         return ret;
-    if ((ret = av_tx_init(&c->fft512, &c->fft512_fn, AV_TX_FLOAT_FFT, 1, 512, NULL, 0)) < 0)
+    if ((ret = av_tx_init(&c->fft512, &c->fft512_fn, AV_TX_FLOAT_FFT, 1, 256, NULL, 0)) < 0)
         return ret;
-    if ((ret = av_tx_init(&c->fft256, &c->fft256_fn, AV_TX_FLOAT_FFT, 0, 256, NULL, 0)) < 0)
+    if ((ret = av_tx_init(&c->fft256, &c->fft256_fn, AV_TX_FLOAT_FFT, 0, 128, NULL, 0)) < 0)
         return ret;
-    if ((ret = av_tx_init(&c->fft128, &c->fft128_fn, AV_TX_FLOAT_FFT, 0, 128, NULL, 0)) < 0)
+    if ((ret = av_tx_init(&c->fft128, &c->fft128_fn, AV_TX_FLOAT_FFT, 0, 64, NULL, 0)) < 0)
         return ret;
 
     c->fdsp = avpriv_float_dsp_alloc(avctx->flags & AV_CODEC_FLAG_BITEXACT);
-- 
2.35.3

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [FFmpeg-devel] [PATCH] avcodec/on2avc: use correct fft sizes
  2023-08-06 12:42 [FFmpeg-devel] [PATCH] avcodec/on2avc: use correct fft sizes Marton Balint
@ 2023-08-06 17:35 ` Lynne
  2023-08-06 19:41   ` [FFmpeg-devel] [PATCH v2] " Marton Balint
  0 siblings, 1 reply; 5+ messages in thread
From: Lynne @ 2023-08-06 17:35 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Aug 6, 2023, 14:42 by cus@passwd.hu:

> With the earlier patch this fixes the audio corruption regression caused by
> 6ba0aa1770ba29eb4126c6a706f6b0cd3809648f.
>
> Fixes ticket #10029.
>
> Signed-off-by: Marton Balint <cus@passwd.hu>
> ---
>  libavcodec/on2avc.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/libavcodec/on2avc.c b/libavcodec/on2avc.c
> index 474adb149d..0d0869bc9c 100644
> --- a/libavcodec/on2avc.c
> +++ b/libavcodec/on2avc.c
> @@ -956,13 +956,13 @@ static av_cold int on2avc_decode_init(AVCodecContext *avctx)
>  if ((ret = av_tx_init(&c->mdct_small, &c->mdct_small_fn, AV_TX_FLOAT_MDCT, 1, 128, &scale, 0)) < 0)
>  return ret;
>  
> -    if ((ret = av_tx_init(&c->fft1024, &c->fft1024_fn, AV_TX_FLOAT_FFT, 1, 1024, NULL, 0)) < 0)
> +    if ((ret = av_tx_init(&c->fft1024, &c->fft1024_fn, AV_TX_FLOAT_FFT, 1, 512, NULL, 0)) < 0)
>  return ret;
> -    if ((ret = av_tx_init(&c->fft512, &c->fft512_fn, AV_TX_FLOAT_FFT, 1, 512, NULL, 0)) < 0)
> +    if ((ret = av_tx_init(&c->fft512, &c->fft512_fn, AV_TX_FLOAT_FFT, 1, 256, NULL, 0)) < 0)
>  return ret;
> -    if ((ret = av_tx_init(&c->fft256, &c->fft256_fn, AV_TX_FLOAT_FFT, 0, 256, NULL, 0)) < 0)
> +    if ((ret = av_tx_init(&c->fft256, &c->fft256_fn, AV_TX_FLOAT_FFT, 0, 128, NULL, 0)) < 0)
>  return ret;
> -    if ((ret = av_tx_init(&c->fft128, &c->fft128_fn, AV_TX_FLOAT_FFT, 0, 128, NULL, 0)) < 0)
> +    if ((ret = av_tx_init(&c->fft128, &c->fft128_fn, AV_TX_FLOAT_FFT, 0, 64, NULL, 0)) < 0)
>  return ret;
>  
>  c->fdsp = avpriv_float_dsp_alloc(avctx->flags & AV_CODEC_FLAG_BITEXACT);
> -- 
> 2.35.3
>

Could you rename the contexts and functions so they're not misleading?
Thanks.
_______________________________________________
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".

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [FFmpeg-devel] [PATCH v2] avcodec/on2avc: use correct fft sizes
  2023-08-06 17:35 ` Lynne
@ 2023-08-06 19:41   ` Marton Balint
  2023-08-07  4:40     ` Lynne
  0 siblings, 1 reply; 5+ messages in thread
From: Marton Balint @ 2023-08-06 19:41 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Marton Balint

Also rename the contexts and the functions so their names will reflect their
intended size.

With the earlier patch this fixes the audio corruption regression caused by
6ba0aa1770ba29eb4126c6a706f6b0cd3809648f.

Fixes ticket #10029.

Signed-off-by: Marton Balint <cus@passwd.hu>
---
 libavcodec/on2avc.c | 32 ++++++++++++++++----------------
 1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/libavcodec/on2avc.c b/libavcodec/on2avc.c
index 474adb149d..b190f36e19 100644
--- a/libavcodec/on2avc.c
+++ b/libavcodec/on2avc.c
@@ -51,9 +51,9 @@ typedef struct On2AVCContext {
     AVCodecContext *avctx;
     AVFloatDSPContext *fdsp;
     AVTXContext *mdct, *mdct_half, *mdct_small;
-    AVTXContext *fft128, *fft256, *fft512, *fft1024;
+    AVTXContext *fft64, *fft128, *fft256, *fft512;
     av_tx_fn mdct_fn, mdct_half_fn, mdct_small_fn;
-    av_tx_fn fft128_fn, fft256_fn, fft512_fn, fft1024_fn;
+    av_tx_fn fft64_fn, fft128_fn, fft256_fn, fft512_fn;
     void (*wtf)(struct On2AVCContext *ctx, float *out, float *in, int size);
 
     int is_av500;
@@ -475,16 +475,16 @@ static void wtf_end_512(On2AVCContext *c, float *out, float *src,
     zero_head_and_tail(tmp1 + 256, 128, 13, 7);
     zero_head_and_tail(tmp1 + 384, 128, 15, 5);
 
-    c->fft128_fn(c->fft128, src +   0, tmp1 +   0, sizeof(float));
-    c->fft128_fn(c->fft128, src + 128, tmp1 + 128, sizeof(float));
-    c->fft128_fn(c->fft128, src + 256, tmp1 + 256, sizeof(float));
-    c->fft128_fn(c->fft128, src + 384, tmp1 + 384, sizeof(float));
+    c->fft64_fn(c->fft64, src +   0, tmp1 +   0, sizeof(float));
+    c->fft64_fn(c->fft64, src + 128, tmp1 + 128, sizeof(float));
+    c->fft64_fn(c->fft64, src + 256, tmp1 + 256, sizeof(float));
+    c->fft64_fn(c->fft64, src + 384, tmp1 + 384, sizeof(float));
 
     combine_fft(src, src + 128, src + 256, src + 384, tmp1,
                 ff_on2avc_ctab_1, ff_on2avc_ctab_2,
                 ff_on2avc_ctab_3, ff_on2avc_ctab_4, 512, 2);
 
-    c->fft512_fn(c->fft512, src, tmp1, sizeof(float));
+    c->fft256_fn(c->fft256, src, tmp1, sizeof(float));
 
     pretwiddle(&tmp0[  0], src, 512, 84, 4, 16, 4, ff_on2avc_tabs_20_84_1);
     pretwiddle(&tmp0[128], src, 512, 84, 4, 16, 4, ff_on2avc_tabs_20_84_2);
@@ -503,16 +503,16 @@ static void wtf_end_1024(On2AVCContext *c, float *out, float *src,
     zero_head_and_tail(tmp1 + 512, 256, 13, 7);
     zero_head_and_tail(tmp1 + 768, 256, 15, 5);
 
-    c->fft256_fn(c->fft256, src +   0, tmp1 +   0, sizeof(float));
-    c->fft256_fn(c->fft256, src + 256, tmp1 + 256, sizeof(float));
-    c->fft256_fn(c->fft256, src + 512, tmp1 + 512, sizeof(float));
-    c->fft256_fn(c->fft256, src + 768, tmp1 + 768, sizeof(float));
+    c->fft128_fn(c->fft128, src +   0, tmp1 +   0, sizeof(float));
+    c->fft128_fn(c->fft128, src + 256, tmp1 + 256, sizeof(float));
+    c->fft128_fn(c->fft128, src + 512, tmp1 + 512, sizeof(float));
+    c->fft128_fn(c->fft128, src + 768, tmp1 + 768, sizeof(float));
 
     combine_fft(src, src + 256, src + 512, src + 768, tmp1,
                 ff_on2avc_ctab_1, ff_on2avc_ctab_2,
                 ff_on2avc_ctab_3, ff_on2avc_ctab_4, 1024, 1);
 
-    c->fft1024_fn(c->fft1024, src, tmp1, sizeof(float));
+    c->fft512_fn(c->fft512, src, tmp1, sizeof(float));
 
     pretwiddle(&tmp0[  0], src, 1024, 84, 4, 16, 4, ff_on2avc_tabs_20_84_1);
     pretwiddle(&tmp0[256], src, 1024, 84, 4, 16, 4, ff_on2avc_tabs_20_84_2);
@@ -956,14 +956,14 @@ static av_cold int on2avc_decode_init(AVCodecContext *avctx)
     if ((ret = av_tx_init(&c->mdct_small, &c->mdct_small_fn, AV_TX_FLOAT_MDCT, 1, 128, &scale, 0)) < 0)
         return ret;
 
-    if ((ret = av_tx_init(&c->fft1024, &c->fft1024_fn, AV_TX_FLOAT_FFT, 1, 1024, NULL, 0)) < 0)
-        return ret;
     if ((ret = av_tx_init(&c->fft512, &c->fft512_fn, AV_TX_FLOAT_FFT, 1, 512, NULL, 0)) < 0)
         return ret;
-    if ((ret = av_tx_init(&c->fft256, &c->fft256_fn, AV_TX_FLOAT_FFT, 0, 256, NULL, 0)) < 0)
+    if ((ret = av_tx_init(&c->fft256, &c->fft256_fn, AV_TX_FLOAT_FFT, 1, 256, NULL, 0)) < 0)
         return ret;
     if ((ret = av_tx_init(&c->fft128, &c->fft128_fn, AV_TX_FLOAT_FFT, 0, 128, NULL, 0)) < 0)
         return ret;
+    if ((ret = av_tx_init(&c->fft64, &c->fft64_fn, AV_TX_FLOAT_FFT, 0, 64, NULL, 0)) < 0)
+        return ret;
 
     c->fdsp = avpriv_float_dsp_alloc(avctx->flags & AV_CODEC_FLAG_BITEXACT);
     if (!c->fdsp)
@@ -998,10 +998,10 @@ static av_cold int on2avc_decode_close(AVCodecContext *avctx)
     av_tx_uninit(&c->mdct);
     av_tx_uninit(&c->mdct_half);
     av_tx_uninit(&c->mdct_small);
+    av_tx_uninit(&c->fft64);
     av_tx_uninit(&c->fft128);
     av_tx_uninit(&c->fft256);
     av_tx_uninit(&c->fft512);
-    av_tx_uninit(&c->fft1024);
 
     av_freep(&c->fdsp);
 
-- 
2.35.3

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2] avcodec/on2avc: use correct fft sizes
  2023-08-06 19:41   ` [FFmpeg-devel] [PATCH v2] " Marton Balint
@ 2023-08-07  4:40     ` Lynne
  2023-08-08 17:36       ` Marton Balint
  0 siblings, 1 reply; 5+ messages in thread
From: Lynne @ 2023-08-07  4:40 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Aug 6, 2023, 21:45 by cus@passwd.hu:

> Also rename the contexts and the functions so their names will reflect their
> intended size.
>
> With the earlier patch this fixes the audio corruption regression caused by
> 6ba0aa1770ba29eb4126c6a706f6b0cd3809648f.
>
> Fixes ticket #10029.
>
> Signed-off-by: Marton Balint <cus@passwd.hu>
> ---
>  libavcodec/on2avc.c | 32 ++++++++++++++++----------------
>  1 file changed, 16 insertions(+), 16 deletions(-)
>
> diff --git a/libavcodec/on2avc.c b/libavcodec/on2avc.c
> index 474adb149d..b190f36e19 100644
> --- a/libavcodec/on2avc.c
> +++ b/libavcodec/on2avc.c
> @@ -51,9 +51,9 @@ typedef struct On2AVCContext {
>  AVCodecContext *avctx;
>  AVFloatDSPContext *fdsp;
>  AVTXContext *mdct, *mdct_half, *mdct_small;
> -    AVTXContext *fft128, *fft256, *fft512, *fft1024;
> +    AVTXContext *fft64, *fft128, *fft256, *fft512;
>  av_tx_fn mdct_fn, mdct_half_fn, mdct_small_fn;
> -    av_tx_fn fft128_fn, fft256_fn, fft512_fn, fft1024_fn;
> +    av_tx_fn fft64_fn, fft128_fn, fft256_fn, fft512_fn;
>  void (*wtf)(struct On2AVCContext *ctx, float *out, float *in, int size);
>  
>  int is_av500;
> @@ -475,16 +475,16 @@ static void wtf_end_512(On2AVCContext *c, float *out, float *src,
>  zero_head_and_tail(tmp1 + 256, 128, 13, 7);
>  zero_head_and_tail(tmp1 + 384, 128, 15, 5);
>  
> -    c->fft128_fn(c->fft128, src +   0, tmp1 +   0, sizeof(float));
> -    c->fft128_fn(c->fft128, src + 128, tmp1 + 128, sizeof(float));
> -    c->fft128_fn(c->fft128, src + 256, tmp1 + 256, sizeof(float));
> -    c->fft128_fn(c->fft128, src + 384, tmp1 + 384, sizeof(float));
> +    c->fft64_fn(c->fft64, src +   0, tmp1 +   0, sizeof(float));
> +    c->fft64_fn(c->fft64, src + 128, tmp1 + 128, sizeof(float));
> +    c->fft64_fn(c->fft64, src + 256, tmp1 + 256, sizeof(float));
> +    c->fft64_fn(c->fft64, src + 384, tmp1 + 384, sizeof(float));
>  
>  combine_fft(src, src + 128, src + 256, src + 384, tmp1,
>  ff_on2avc_ctab_1, ff_on2avc_ctab_2,
>  ff_on2avc_ctab_3, ff_on2avc_ctab_4, 512, 2);
>  
> -    c->fft512_fn(c->fft512, src, tmp1, sizeof(float));
> +    c->fft256_fn(c->fft256, src, tmp1, sizeof(float));
>  
>  pretwiddle(&tmp0[  0], src, 512, 84, 4, 16, 4, ff_on2avc_tabs_20_84_1);
>  pretwiddle(&tmp0[128], src, 512, 84, 4, 16, 4, ff_on2avc_tabs_20_84_2);
> @@ -503,16 +503,16 @@ static void wtf_end_1024(On2AVCContext *c, float *out, float *src,
>  zero_head_and_tail(tmp1 + 512, 256, 13, 7);
>  zero_head_and_tail(tmp1 + 768, 256, 15, 5);
>  
> -    c->fft256_fn(c->fft256, src +   0, tmp1 +   0, sizeof(float));
> -    c->fft256_fn(c->fft256, src + 256, tmp1 + 256, sizeof(float));
> -    c->fft256_fn(c->fft256, src + 512, tmp1 + 512, sizeof(float));
> -    c->fft256_fn(c->fft256, src + 768, tmp1 + 768, sizeof(float));
> +    c->fft128_fn(c->fft128, src +   0, tmp1 +   0, sizeof(float));
> +    c->fft128_fn(c->fft128, src + 256, tmp1 + 256, sizeof(float));
> +    c->fft128_fn(c->fft128, src + 512, tmp1 + 512, sizeof(float));
> +    c->fft128_fn(c->fft128, src + 768, tmp1 + 768, sizeof(float));
>  
>  combine_fft(src, src + 256, src + 512, src + 768, tmp1,
>  ff_on2avc_ctab_1, ff_on2avc_ctab_2,
>  ff_on2avc_ctab_3, ff_on2avc_ctab_4, 1024, 1);
>  
> -    c->fft1024_fn(c->fft1024, src, tmp1, sizeof(float));
> +    c->fft512_fn(c->fft512, src, tmp1, sizeof(float));
>  
>  pretwiddle(&tmp0[  0], src, 1024, 84, 4, 16, 4, ff_on2avc_tabs_20_84_1);
>  pretwiddle(&tmp0[256], src, 1024, 84, 4, 16, 4, ff_on2avc_tabs_20_84_2);
> @@ -956,14 +956,14 @@ static av_cold int on2avc_decode_init(AVCodecContext *avctx)
>  if ((ret = av_tx_init(&c->mdct_small, &c->mdct_small_fn, AV_TX_FLOAT_MDCT, 1, 128, &scale, 0)) < 0)
>  return ret;
>  
> -    if ((ret = av_tx_init(&c->fft1024, &c->fft1024_fn, AV_TX_FLOAT_FFT, 1, 1024, NULL, 0)) < 0)
> -        return ret;
>  if ((ret = av_tx_init(&c->fft512, &c->fft512_fn, AV_TX_FLOAT_FFT, 1, 512, NULL, 0)) < 0)
>  return ret;
> -    if ((ret = av_tx_init(&c->fft256, &c->fft256_fn, AV_TX_FLOAT_FFT, 0, 256, NULL, 0)) < 0)
> +    if ((ret = av_tx_init(&c->fft256, &c->fft256_fn, AV_TX_FLOAT_FFT, 1, 256, NULL, 0)) < 0)
>  return ret;
>  if ((ret = av_tx_init(&c->fft128, &c->fft128_fn, AV_TX_FLOAT_FFT, 0, 128, NULL, 0)) < 0)
>  return ret;
> +    if ((ret = av_tx_init(&c->fft64, &c->fft64_fn, AV_TX_FLOAT_FFT, 0, 64, NULL, 0)) < 0)
> +        return ret;
>  
>  c->fdsp = avpriv_float_dsp_alloc(avctx->flags & AV_CODEC_FLAG_BITEXACT);
>  if (!c->fdsp)
> @@ -998,10 +998,10 @@ static av_cold int on2avc_decode_close(AVCodecContext *avctx)
>  av_tx_uninit(&c->mdct);
>  av_tx_uninit(&c->mdct_half);
>  av_tx_uninit(&c->mdct_small);
> +    av_tx_uninit(&c->fft64);
>  av_tx_uninit(&c->fft128);
>  av_tx_uninit(&c->fft256);
>  av_tx_uninit(&c->fft512);
> -    av_tx_uninit(&c->fft1024);
>  
>  av_freep(&c->fdsp); 
>

LGTM
Thanks
_______________________________________________
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".

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [FFmpeg-devel] [PATCH v2] avcodec/on2avc: use correct fft sizes
  2023-08-07  4:40     ` Lynne
@ 2023-08-08 17:36       ` Marton Balint
  0 siblings, 0 replies; 5+ messages in thread
From: Marton Balint @ 2023-08-08 17:36 UTC (permalink / raw)
  To: FFmpeg development discussions and patches



On Mon, 7 Aug 2023, Lynne wrote:

> Aug 6, 2023, 21:45 by cus@passwd.hu:
>
>> Also rename the contexts and the functions so their names will reflect their
>> intended size.
>>
>> With the earlier patch this fixes the audio corruption regression caused by
>> 6ba0aa1770ba29eb4126c6a706f6b0cd3809648f.
>>
>> Fixes ticket #10029.
>>

[...]

>>
>
> LGTM
> Thanks

Will apply, thanks.

Marton
_______________________________________________
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".

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2023-08-08 17:39 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-06 12:42 [FFmpeg-devel] [PATCH] avcodec/on2avc: use correct fft sizes Marton Balint
2023-08-06 17:35 ` Lynne
2023-08-06 19:41   ` [FFmpeg-devel] [PATCH v2] " Marton Balint
2023-08-07  4:40     ` Lynne
2023-08-08 17:36       ` Marton Balint

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git