diff --git a/src/gsplash b/src/gsplash new file mode 160000 index 0000000..8d5a106 --- /dev/null +++ b/src/gsplash @@ -0,0 +1 @@ +Subproject commit 8d5a106ab3158fd4acf8745ae14db96748dc90b2 diff --git a/src/gsplash.c b/src/gsplash.c index 748f796..da0cdcd 100644 --- a/src/gsplash.c +++ b/src/gsplash.c @@ -343,7 +343,7 @@ int main(int argc, char *argv[]) { log_info("Splash window hidden (focus lost), scheduling hide"); hide_scheduled = true; - hide_time = SDL_GetTicks() + 250; // 250ms delay to prevent desktop flash + hide_time = SDL_GetTicks() + 100; // 100ms delay to prevent desktop flash } // Re-render static image when compositor requests a redraw if (event.window.event == SDL_WINDOWEVENT_EXPOSED && texture && !video_active) diff --git a/src/video.c b/src/video.c index 42ffd40..bf5d346 100644 --- a/src/video.c +++ b/src/video.c @@ -159,23 +159,26 @@ void cleanup_video_player(VideoPlayer *player) bool decode_next_frame(VideoPlayer *player) { - AVPacket packet; - av_init_packet(&packet); - - while (av_read_frame(player->format_ctx, &packet) >= 0) + AVPacket *packet = av_packet_alloc(); + if (!packet) { - if (packet.stream_index != player->stream_index) + return false; + } + + while (av_read_frame(player->format_ctx, packet) >= 0) + { + if (packet->stream_index != player->stream_index) { - av_packet_unref(&packet); + av_packet_unref(packet); continue; } - if (avcodec_send_packet(player->codec_ctx, &packet) < 0) + if (avcodec_send_packet(player->codec_ctx, packet) < 0) { - av_packet_unref(&packet); + av_packet_unref(packet); continue; } - av_packet_unref(&packet); + av_packet_unref(packet); while (true) { @@ -186,6 +189,7 @@ bool decode_next_frame(VideoPlayer *player) } if (ret < 0) { + av_packet_free(&packet); return false; } @@ -195,11 +199,13 @@ bool decode_next_frame(VideoPlayer *player) SDL_UpdateTexture(player->texture, NULL, player->rgba_frame->data[0], player->rgba_frame->linesize[0]); + av_packet_free(&packet); return true; } } av_seek_frame(player->format_ctx, player->stream_index, 0, AVSEEK_FLAG_BACKWARD); avcodec_flush_buffers(player->codec_ctx); + av_packet_free(&packet); return false; }