diff --git a/src/core/arm/skyeye_common/armstate.cpp b/src/core/arm/skyeye_common/armstate.cpp
index 078b4db247..4971d8c2e8 100644
--- a/src/core/arm/skyeye_common/armstate.cpp
+++ b/src/core/arm/skyeye_common/armstate.cpp
@@ -110,7 +110,7 @@ void ARMul_State::Reset() {
     Reg[13] = 0x10000000;
     Reg[15] = 0;
 
-    Cpsr = static_cast<u32>(INTBITS) | SVC32MODE;
+    Cpsr = static_cast<u32>(INTBITS) | static_cast<u32>(SVC32MODE);
     Mode = SVC32MODE;
     Bank = SVCBANK;
 
diff --git a/src/core/cheats/cheats.cpp b/src/core/cheats/cheats.cpp
index 14fd027753..26a77edee0 100644
--- a/src/core/cheats/cheats.cpp
+++ b/src/core/cheats/cheats.cpp
@@ -52,7 +52,7 @@ void CheatEngine::AddCheat(const std::shared_ptr<CheatBase>& cheat) {
 
 void CheatEngine::RemoveCheat(std::size_t index) {
     std::unique_lock<std::shared_mutex> lock(cheats_list_mutex);
-    if (index < 0 || index >= static_cast<int>(cheats_list.size())) {
+    if (index < 0 || index >= cheats_list.size()) {
         LOG_ERROR(Core_Cheats, "Invalid index {}", index);
         return;
     }
@@ -61,7 +61,7 @@ void CheatEngine::RemoveCheat(std::size_t index) {
 
 void CheatEngine::UpdateCheat(std::size_t index, const std::shared_ptr<CheatBase>& new_cheat) {
     std::unique_lock<std::shared_mutex> lock(cheats_list_mutex);
-    if (index < 0 || index >= static_cast<int>(cheats_list.size())) {
+    if (index < 0 || index >= cheats_list.size()) {
         LOG_ERROR(Core_Cheats, "Invalid index {}", index);
         return;
     }
diff --git a/src/core/dumping/ffmpeg_backend.cpp b/src/core/dumping/ffmpeg_backend.cpp
index c0c8a4f46b..caef31ca84 100644
--- a/src/core/dumping/ffmpeg_backend.cpp
+++ b/src/core/dumping/ffmpeg_backend.cpp
@@ -59,21 +59,25 @@ void FFmpegStream::Flush() {
     SendFrame(nullptr);
 }
 
-void FFmpegStream::WritePacket(AVPacket& packet) {
-    FFmpeg::av_packet_rescale_ts(&packet, codec_context->time_base, stream->time_base);
-    packet.stream_index = stream->index;
+void FFmpegStream::WritePacket(AVPacket* packet) {
+    FFmpeg::av_packet_rescale_ts(packet, codec_context->time_base, stream->time_base);
+    packet->stream_index = stream->index;
     {
         std::lock_guard lock{*format_context_mutex};
-        FFmpeg::av_interleaved_write_frame(format_context, &packet);
+        FFmpeg::av_interleaved_write_frame(format_context, packet);
     }
 }
 
 void FFmpegStream::SendFrame(AVFrame* frame) {
     // Initialize packet
-    AVPacket packet;
-    FFmpeg::av_init_packet(&packet);
-    packet.data = nullptr;
-    packet.size = 0;
+    AVPacket* packet = FFmpeg::av_packet_alloc();
+    if (!packet) {
+        LOG_ERROR(Render, "Frame dropped: av_packet_alloc failed");
+    }
+    SCOPE_EXIT({ FFmpeg::av_packet_free(&packet); });
+
+    packet->data = nullptr;
+    packet->size = 0;
 
     // Encode frame
     if (FFmpeg::avcodec_send_frame(codec_context.get(), frame) < 0) {
@@ -82,7 +86,7 @@ void FFmpegStream::SendFrame(AVFrame* frame) {
     }
     int error = 1;
     while (error >= 0) {
-        error = FFmpeg::avcodec_receive_packet(codec_context.get(), &packet);
+        error = FFmpeg::avcodec_receive_packet(codec_context.get(), packet);
         if (error == AVERROR(EAGAIN) || error == AVERROR_EOF)
             return;
         if (error < 0) {
@@ -485,7 +489,7 @@ bool FFmpegAudioStream::Init(FFmpegMuxer& muxer) {
     }
     codec_context->time_base.num = 1;
     codec_context->time_base.den = codec_context->sample_rate;
-#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 24, 100)
+#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 24, 100) // lavc 59.24.100
     codec_context->ch_layout = AV_CHANNEL_LAYOUT_STEREO;
 #else
     codec_context->channel_layout = AV_CH_LAYOUT_STEREO;
@@ -527,7 +531,7 @@ bool FFmpegAudioStream::Init(FFmpegMuxer& muxer) {
     audio_frame->format = codec_context->sample_fmt;
     audio_frame->sample_rate = codec_context->sample_rate;
 
-#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 24, 100)
+#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 24, 100) // lavc 59.24.100
     auto num_channels = codec_context->ch_layout.nb_channels;
     audio_frame->ch_layout = codec_context->ch_layout;
     SwrContext* context = nullptr;
@@ -1003,7 +1007,7 @@ void GetOptionList(std::vector<OptionInfo>& out, const AVClass* av_class, bool s
     }
 
     const AVClass* child_class = nullptr;
-#if LIBAVCODEC_VERSION_MAJOR >= 59
+#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(56, 53, 100) // lavu 56.53.100
     void* iter = nullptr;
     while ((child_class = FFmpeg::av_opt_child_class_iterate(av_class, &iter))) {
 #else
diff --git a/src/core/dumping/ffmpeg_backend.h b/src/core/dumping/ffmpeg_backend.h
index 115731f67d..c8eb0ae3ff 100644
--- a/src/core/dumping/ffmpeg_backend.h
+++ b/src/core/dumping/ffmpeg_backend.h
@@ -37,7 +37,7 @@ public:
 protected:
     ~FFmpegStream();
 
-    void WritePacket(AVPacket& packet);
+    void WritePacket(AVPacket* packet);
     void SendFrame(AVFrame* frame);
 
     struct AVCodecContextDeleter {
@@ -52,6 +52,12 @@ protected:
         }
     };
 
+    struct AVPacketDeleter {
+        void operator()(AVPacket* packet) const {
+            av_packet_free(&packet);
+        }
+    };
+
     AVFormatContext* format_context{};
     std::mutex* format_context_mutex{};
     std::unique_ptr<AVCodecContext, AVCodecContextDeleter> codec_context{};
diff --git a/src/core/file_sys/archive_backend.h b/src/core/file_sys/archive_backend.h
index 77f041d7e6..0fada0f23c 100644
--- a/src/core/file_sys/archive_backend.h
+++ b/src/core/file_sys/archive_backend.h
@@ -31,7 +31,7 @@ enum class LowPathType : u32 {
 };
 
 union Mode {
-    u32 hex;
+    u32 hex = 0;
     BitField<0, 1, u32> read_flag;
     BitField<1, 1, u32> write_flag;
     BitField<2, 1, u32> create_flag;
diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h
index b807bc261b..6004652419 100644
--- a/src/core/hle/kernel/kernel.h
+++ b/src/core/hle/kernel/kernel.h
@@ -90,7 +90,7 @@ union CoreVersion {
         major.Assign(major_ver);
     }
 
-    u32 raw;
+    u32 raw = 0;
     BitField<8, 8, u32> revision;
     BitField<16, 8, u32> minor;
     BitField<24, 8, u32> major;
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp
index 6c7b93d05c..a6ccf95258 100644
--- a/src/core/hle/kernel/thread.cpp
+++ b/src/core/hle/kernel/thread.cpp
@@ -3,6 +3,7 @@
 // Refer to the license.txt file included.
 
 #include <algorithm>
+#include <climits>
 #include <list>
 #include <vector>
 #include <boost/serialization/string.hpp>
@@ -288,7 +289,7 @@ void ThreadManager::DebugThreadQueue() {
 
     for (auto& t : thread_list) {
         u32 priority = ready_queue.contains(t.get());
-        if (priority != -1) {
+        if (priority != UINT_MAX) {
             LOG_DEBUG(Kernel, "0x{:02X} {}", priority, t->GetObjectId());
         }
     }
diff --git a/src/core/hle/service/cfg/cfg.cpp b/src/core/hle/service/cfg/cfg.cpp
index 9a2956b310..3b2c6e1130 100644
--- a/src/core/hle/service/cfg/cfg.cpp
+++ b/src/core/hle/service/cfg/cfg.cpp
@@ -904,7 +904,7 @@ void Module::SetSystemSetupNeeded(bool setup_needed) {
 }
 
 bool Module::IsSystemSetupNeeded() {
-    u32 block;
+    u32 block{};
     GetConfigInfoBlock(SystemSetupRequiredBlockID, sizeof(block), 0xC, &block);
     return (block & 0xFFFF) == 0;
 }
diff --git a/src/core/hle/service/ir/extra_hid.cpp b/src/core/hle/service/ir/extra_hid.cpp
index 5e75110337..eff81c7111 100644
--- a/src/core/hle/service/ir/extra_hid.cpp
+++ b/src/core/hle/service/ir/extra_hid.cpp
@@ -204,12 +204,11 @@ void ExtraHID::HandleReadCalibrationDataRequest(const std::vector<u8>& request_b
         return;
     }
 
-    std::vector<u8> response(5);
+    std::vector<u8> response(5 + size);
     response[0] = static_cast<u8>(ResponseID::ReadCalibrationData);
     std::memcpy(&response[1], &request.offset, sizeof(request.offset));
     std::memcpy(&response[3], &request.size, sizeof(request.size));
-    response.insert(response.end(), calibration_data.begin() + offset,
-                    calibration_data.begin() + offset + size);
+    std::memcpy(&response[5], calibration_data.data() + offset, size);
     Send(response);
 }
 
diff --git a/src/core/hle/service/nwm/uds_data.cpp b/src/core/hle/service/nwm/uds_data.cpp
index 6cc381a436..396bc85487 100644
--- a/src/core/hle/service/nwm/uds_data.cpp
+++ b/src/core/hle/service/nwm/uds_data.cpp
@@ -303,6 +303,7 @@ std::vector<u8> GenerateEAPoLStartFrame(u16 association_id, const NodeInfo& node
     std::memcpy(eapol_buffer.data(), &eapol_start, sizeof(eapol_start));
 
     std::vector<u8> buffer = GenerateLLCHeader(EtherType::EAPoL);
+    buffer.reserve(buffer.size() + sizeof(EAPoLStartPacket));
     buffer.insert(buffer.end(), eapol_buffer.begin(), eapol_buffer.end());
     return buffer;
 }
@@ -366,6 +367,7 @@ std::vector<u8> GenerateEAPoLLogoffFrame(const MacAddress& mac_address, u16 netw
     std::memcpy(eapol_buffer.data(), &eapol_logoff, sizeof(eapol_logoff));
 
     std::vector<u8> buffer = GenerateLLCHeader(EtherType::EAPoL);
+    buffer.reserve(buffer.size() + sizeof(EAPoLStartPacket));
     buffer.insert(buffer.end(), eapol_buffer.begin(), eapol_buffer.end());
     return buffer;
 }
diff --git a/src/core/hle/service/soc_u.cpp b/src/core/hle/service/soc_u.cpp
index 7be6624d60..eba312ee34 100644
--- a/src/core/hle/service/soc_u.cpp
+++ b/src/core/hle/service/soc_u.cpp
@@ -519,9 +519,9 @@ struct CTRPollFD {
         CTRPollFD result;
         result.events.hex = Events::TranslateTo3DS(fd.events, has_libctru_bug).hex;
         result.revents.hex = Events::TranslateTo3DS(fd.revents, has_libctru_bug).hex;
-        for (auto iter = socu.open_sockets.begin(); iter != socu.open_sockets.end(); ++iter) {
-            if (iter->second.socket_fd == fd.fd) {
-                result.fd = iter->first;
+        for (const auto& socket : socu.open_sockets) {
+            if (socket.second.socket_fd == fd.fd) {
+                result.fd = socket.first;
                 break;
             }
         }
@@ -662,7 +662,8 @@ struct CTRAddrInfo {
         };
         ctr_addr.ai_addrlen = static_cast<s32_le>(ctr_addr.ai_addr.raw.len);
         if (addr.ai_canonname)
-            std::strncpy(ctr_addr.ai_canonname, addr.ai_canonname, sizeof(ctr_addr.ai_canonname));
+            std::strncpy(ctr_addr.ai_canonname, addr.ai_canonname,
+                         sizeof(ctr_addr.ai_canonname) - 1);
         return ctr_addr;
     }
 
diff --git a/src/core/movie.cpp b/src/core/movie.cpp
index 2348fe827a..c2d085d29b 100644
--- a/src/core/movie.cpp
+++ b/src/core/movie.cpp
@@ -45,7 +45,7 @@ struct ControllerState {
     union {
         struct {
             union {
-                u16_le hex;
+                u16_le hex = 0;
 
                 BitField<0, 1, u16> a;
                 BitField<1, 1, u16> b;
@@ -96,7 +96,7 @@ struct ControllerState {
 
         struct {
             union {
-                u32_le hex;
+                u32_le hex = 0;
 
                 BitField<0, 5, u32> battery_level;
                 BitField<5, 1, u32> zl_not_held;
@@ -136,7 +136,7 @@ static u64 GetInputCount(const std::vector<u8>& input) {
             break;
         }
 
-        ControllerState state;
+        ControllerState state{};
         std::memcpy(&state, input.data() + pos, sizeof(ControllerState));
         if (state.type == ControllerStateType::PadAndCircle) {
             input_count++;
@@ -238,7 +238,7 @@ void Movie::CheckInputEnd() {
 }
 
 void Movie::Play(Service::HID::PadState& pad_state, s16& circle_pad_x, s16& circle_pad_y) {
-    ControllerState s;
+    ControllerState s{};
     std::memcpy(&s, &recorded_input[current_byte], sizeof(ControllerState));
     current_byte += sizeof(ControllerState);
     current_input++;
@@ -270,7 +270,7 @@ void Movie::Play(Service::HID::PadState& pad_state, s16& circle_pad_x, s16& circ
 }
 
 void Movie::Play(Service::HID::TouchDataEntry& touch_data) {
-    ControllerState s;
+    ControllerState s{};
     std::memcpy(&s, &recorded_input[current_byte], sizeof(ControllerState));
     current_byte += sizeof(ControllerState);
 
@@ -287,7 +287,7 @@ void Movie::Play(Service::HID::TouchDataEntry& touch_data) {
 }
 
 void Movie::Play(Service::HID::AccelerometerDataEntry& accelerometer_data) {
-    ControllerState s;
+    ControllerState s{};
     std::memcpy(&s, &recorded_input[current_byte], sizeof(ControllerState));
     current_byte += sizeof(ControllerState);
 
@@ -304,7 +304,7 @@ void Movie::Play(Service::HID::AccelerometerDataEntry& accelerometer_data) {
 }
 
 void Movie::Play(Service::HID::GyroscopeDataEntry& gyroscope_data) {
-    ControllerState s;
+    ControllerState s{};
     std::memcpy(&s, &recorded_input[current_byte], sizeof(ControllerState));
     current_byte += sizeof(ControllerState);
 
@@ -321,7 +321,7 @@ void Movie::Play(Service::HID::GyroscopeDataEntry& gyroscope_data) {
 }
 
 void Movie::Play(Service::IR::PadState& pad_state, s16& c_stick_x, s16& c_stick_y) {
-    ControllerState s;
+    ControllerState s{};
     std::memcpy(&s, &recorded_input[current_byte], sizeof(ControllerState));
     current_byte += sizeof(ControllerState);
 
@@ -339,7 +339,7 @@ void Movie::Play(Service::IR::PadState& pad_state, s16& c_stick_x, s16& c_stick_
 }
 
 void Movie::Play(Service::IR::ExtraHIDResponse& extra_hid_response) {
-    ControllerState s;
+    ControllerState s{};
     std::memcpy(&s, &recorded_input[current_byte], sizeof(ControllerState));
     current_byte += sizeof(ControllerState);
 
@@ -371,7 +371,7 @@ void Movie::Record(const Service::HID::PadState& pad_state, const s16& circle_pa
                    const s16& circle_pad_y) {
     current_input++;
 
-    ControllerState s;
+    ControllerState s{};
     s.type = ControllerStateType::PadAndCircle;
 
     s.pad_and_circle.a.Assign(static_cast<u16>(pad_state.a));
@@ -396,7 +396,7 @@ void Movie::Record(const Service::HID::PadState& pad_state, const s16& circle_pa
 }
 
 void Movie::Record(const Service::HID::TouchDataEntry& touch_data) {
-    ControllerState s;
+    ControllerState s{};
     s.type = ControllerStateType::Touch;
 
     s.touch.x = touch_data.x;
@@ -407,7 +407,7 @@ void Movie::Record(const Service::HID::TouchDataEntry& touch_data) {
 }
 
 void Movie::Record(const Service::HID::AccelerometerDataEntry& accelerometer_data) {
-    ControllerState s;
+    ControllerState s{};
     s.type = ControllerStateType::Accelerometer;
 
     s.accelerometer.x = accelerometer_data.x;
@@ -418,7 +418,7 @@ void Movie::Record(const Service::HID::AccelerometerDataEntry& accelerometer_dat
 }
 
 void Movie::Record(const Service::HID::GyroscopeDataEntry& gyroscope_data) {
-    ControllerState s;
+    ControllerState s{};
     s.type = ControllerStateType::Gyroscope;
 
     s.gyroscope.x = gyroscope_data.x;
@@ -430,7 +430,7 @@ void Movie::Record(const Service::HID::GyroscopeDataEntry& gyroscope_data) {
 
 void Movie::Record(const Service::IR::PadState& pad_state, const s16& c_stick_x,
                    const s16& c_stick_y) {
-    ControllerState s;
+    ControllerState s{};
     s.type = ControllerStateType::IrRst;
 
     s.ir_rst.x = c_stick_x;
@@ -442,7 +442,7 @@ void Movie::Record(const Service::IR::PadState& pad_state, const s16& c_stick_x,
 }
 
 void Movie::Record(const Service::IR::ExtraHIDResponse& extra_hid_response) {
-    ControllerState s;
+    ControllerState s{};
     s.type = ControllerStateType::ExtraHidResponse;
 
     s.extra_hid_response.battery_level.Assign(extra_hid_response.buttons.battery_level);