Einverstanden, sammeln wir compiler Warnungen.
[ANNOUNCE] VDR Version 2.7.1 freigegeben
-
-
wirbel Deinem Kommentar entnehme ich, dass wir an dieser Stelle wohl eher nicht zusammenkommen ;-). Ob das mit dem #pragma tatsächlich funktioniert kannst nur du testen, denn ich habe gcc 14.1.0 nicht im Einsatz.
Aber schauen wir uns doch mal den Assembler-Code an (ohne -O3, denn damit ist die Struktur nur schwer wiederzuerkennen).
Hier der ursprüngliche Aufruf:
Code# remux.c:1746: int sps_max_sub_layers_minus1 = GetBits(3); // sps_max_sub_layers_minus1 movq -264(%rbp), %rax # this, _2 movl $3, %esi #, movq %rax, %rdi # _2, call _ZN11cH264Parser7GetBitsEi # movl %eax, -120(%rbp) # _3, sps_max_sub_layers_minus1
Hier dein Vorschlag:
Code
Display More# remux.c:1746: int sps_max_sub_layers_minus1 = min(GetBits(3), 7U); // sps_max_sub_layers_minus1 movl $7, -228(%rbp) #, D.45483 movq -280(%rbp), %rax # this, _2 movl $3, %esi #, movq %rax, %rdi # _2, call _ZN11cH264Parser7GetBitsEi # movl %eax, -224(%rbp) # _3, D.45482 leaq -228(%rbp), %rdx #, tmp307 leaq -224(%rbp), %rax #, tmp308 movq %rdx, %rsi # tmp307, movq %rax, %rdi # tmp308, call _ZSt3minIjERKT_S2_S2_ # movl (%rax), %eax # *_4, _5 movl %eax, -120(%rbp) # _5, sps_max_sub_layers_minus1
Einiges an Aufwand, nur um den Compiler zufriedenzustellen.
Vorschlag zur Güte:
Code# remux.c:1746: int sps_max_sub_layers_minus1 = GetBits(3) & 7; // sps_max_sub_layers_minus1 - "& 7" to silence compiler warning in gcc 14.1.0 movq -264(%rbp), %rax # this, _2 movl $3, %esi #, movq %rax, %rdi # _2, call _ZN11cH264Parser7GetBitsEi # andl $7, %eax #, tmp306 movl %eax, -120(%rbp) # tmp306, sps_max_sub_layers_minus1
Ist minimalinvasiv und sollte den Compiler auch zufriedenstellen.
Magst du das vielleicht testen?
Hier als Diff:
Diff
Display More--- remux.c 2024/01/23 19:33:45 5.7 +++ remux.c 2024/09/14 21:24:49 @@ -1743,7 +1743,7 @@ uint8_t sub_layer_profile_present_flag[8]; uint8_t sub_layer_level_present_flag[8]; GetBits(4); // sps_video_parameter_set_id - int sps_max_sub_layers_minus1 = GetBits(3); // sps_max_sub_layers_minus1 + int sps_max_sub_layers_minus1 = GetBits(3) & 7; // sps_max_sub_layers_minus1 - "& 7" to silence compiler warning in gcc 14.1.0 GetBit(); // sps_temporal_id_nesting_flag // begin profile_tier_level(1, sps_max_sub_layers_minus1) GetByte();
-
Die Änderung funktioniert.
Participate now!
Don’t have an account yet? Register yourself now and be a part of our community!