diff mbox series

[FFmpeg-devel,17/39] avcodec/me_cmp: Remove ff_check_alignment()

Message ID 20201210111657.2276739-18-andreas.rheinhardt@gmail.com
State Accepted
Headers show
Series Make mpegvideo encoders init-threadsafe
Related show

Checks

Context Check Description
andriy/x86_make success Make finished
andriy/x86_make_fate success Make fate finished

Commit Message

Andreas Rheinhardt Dec. 10, 2020, 11:16 a.m. UTC
The usage of a static variable presents a potential for data races and
means that this function can't be used in init functions of codecs with
FF_CODEC_CAP_INIT_THREADSAFE (unless of course one presumes that
everything is alright in which case the error is not triggered; but then
the whole function is pointless...). This makes the Snow decoder
init-threadsafe as it already claims.

Notice that this function has been removed in 2014 by Libav in commit
9103185bd116930f90b847090e66a64fa9971ce2, because only some codepaths
are checked this way and because it only affects legacy compilers. The
latter is of course even more true today.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
---
 libavcodec/me_cmp.c        | 23 -----------------------
 libavcodec/me_cmp.h        |  2 --
 libavcodec/mpegvideo_enc.c |  6 ------
 3 files changed, 31 deletions(-)

Comments

Anton Khirnov Jan. 18, 2021, 10:19 a.m. UTC | #1
Quoting Andreas Rheinhardt (2020-12-10 12:16:35)
> The usage of a static variable presents a potential for data races and
> means that this function can't be used in init functions of codecs with
> FF_CODEC_CAP_INIT_THREADSAFE (unless of course one presumes that
> everything is alright in which case the error is not triggered; but then
> the whole function is pointless...). This makes the Snow decoder
> init-threadsafe as it already claims.
> 
> Notice that this function has been removed in 2014 by Libav in commit
> 9103185bd116930f90b847090e66a64fa9971ce2, because only some codepaths
> are checked this way and because it only affects legacy compilers. The
> latter is of course even more true today.

Furthermore even if this should be checked at all, this is not the place
for it.

> 
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
> ---
>  libavcodec/me_cmp.c        | 23 -----------------------
>  libavcodec/me_cmp.h        |  2 --
>  libavcodec/mpegvideo_enc.c |  6 ------
>  3 files changed, 31 deletions(-)

Patch very ok
diff mbox series

Patch

diff --git a/libavcodec/me_cmp.c b/libavcodec/me_cmp.c
index ae248c52f8..34ecea9bb4 100644
--- a/libavcodec/me_cmp.c
+++ b/libavcodec/me_cmp.c
@@ -1011,31 +1011,8 @@  WRAPPER8_16_SQ(quant_psnr8x8_c, quant_psnr16_c)
 WRAPPER8_16_SQ(rd8x8_c, rd16_c)
 WRAPPER8_16_SQ(bit8x8_c, bit16_c)
 
-int ff_check_alignment(void)
-{
-    static int did_fail = 0;
-    LOCAL_ALIGNED_16(int, aligned, [4]);
-
-    if ((intptr_t)aligned & 15) {
-        if (!did_fail) {
-#if HAVE_MMX || HAVE_ALTIVEC
-            av_log(NULL, AV_LOG_ERROR,
-                "Compiler did not align stack variables. Libavcodec has been miscompiled\n"
-                "and may be very slow or crash. This is not a bug in libavcodec,\n"
-                "but in the compiler. You may try recompiling using gcc >= 4.2.\n"
-                "Do not report crashes to FFmpeg developers.\n");
-#endif
-            did_fail=1;
-        }
-        return -1;
-    }
-    return 0;
-}
-
 av_cold void ff_me_cmp_init(MECmpContext *c, AVCodecContext *avctx)
 {
-    ff_check_alignment();
-
     c->sum_abs_dctelem = sum_abs_dctelem_c;
 
     /* TODO [0] 16  [1] 8 */
diff --git a/libavcodec/me_cmp.h b/libavcodec/me_cmp.h
index 0a589e3c3d..e9b5161c9a 100644
--- a/libavcodec/me_cmp.h
+++ b/libavcodec/me_cmp.h
@@ -79,8 +79,6 @@  typedef struct MECmpContext {
     me_cmp_func median_sad[6];
 } MECmpContext;
 
-int ff_check_alignment(void);
-
 void ff_me_cmp_init(MECmpContext *c, AVCodecContext *avctx);
 void ff_me_cmp_init_alpha(MECmpContext *c, AVCodecContext *avctx);
 void ff_me_cmp_init_arm(MECmpContext *c, AVCodecContext *avctx);
diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c
index 243d3ca632..4cefe05353 100644
--- a/libavcodec/mpegvideo_enc.c
+++ b/libavcodec/mpegvideo_enc.c
@@ -2785,8 +2785,6 @@  static int pre_estimate_motion_thread(AVCodecContext *c, void *arg){
 static int estimate_motion_thread(AVCodecContext *c, void *arg){
     MpegEncContext *s= *(void**)arg;
 
-    ff_check_alignment();
-
     s->me.dia_size= s->avctx->dia_size;
     s->first_slice_line=1;
     for(s->mb_y= s->start_mb_y; s->mb_y < s->end_mb_y; s->mb_y++) {
@@ -2813,8 +2811,6 @@  static int mb_var_thread(AVCodecContext *c, void *arg){
     MpegEncContext *s= *(void**)arg;
     int mb_x, mb_y;
 
-    ff_check_alignment();
-
     for(mb_y=s->start_mb_y; mb_y < s->end_mb_y; mb_y++) {
         for(mb_x=0; mb_x < s->mb_width; mb_x++) {
             int xx = mb_x * 16;
@@ -2943,8 +2939,6 @@  static int encode_thread(AVCodecContext *c, void *arg){
     uint8_t bit_buf_tex[2][MAX_MB_BYTES];
     PutBitContext pb[2], pb2[2], tex_pb[2];
 
-    ff_check_alignment();
-
     for(i=0; i<2; i++){
         init_put_bits(&pb    [i], bit_buf    [i], MAX_MB_BYTES);
         init_put_bits(&pb2   [i], bit_buf2   [i], MAX_MB_BYTES);