Browse Source
[host1x] Fix FFmpeg crash on Linux (#37 )
This fixes the FFmpeg crash on Linux / Steam Deck.
Credit to Maufeat for AVERROR_EOF check.
Co-authored-by: MaranBr <maranbr@outlook.com>
Co-authored-by: crueter <crueter@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/37
Co-authored-by: MaranBr <maranbr@eden-emu.dev>
Co-committed-by: MaranBr <maranbr@eden-emu.dev>
pull/68/head
MaranBr
5 months ago
committed by
crueter
No known key found for this signature in database
GPG Key ID: 425ACD2D4830EBC6
3 changed files with
16 additions and
9 deletions
.ci/linux/build.sh
.ci/windows/build.sh
src/video_core/host1x/ffmpeg/ffmpeg.cpp
@ -36,15 +36,16 @@ case "$1" in
ARCH = armv9
ARCH_FLAGS = "-march=armv9-a -mtune=generic -w"
; ;
*)
echo " Invalid target $1 specified, must be one of amd64, steamdeck, allyx, rog-ally, legacy, aarch64, armv9 "
exit 1
; ;
esac
export ARCH_FLAGS = " $ARCH_FLAGS -O3 "
NPROC = " $2 "
if [ -z " $NPROC " ] ; then
NPROC = " $( nproc) "
else
shift
fi
if [ " $1 " != "" ] ; then shift; fi
@ -72,11 +73,15 @@ else
MULTIMEDIA = ON
fi
if [ -z " $BUILD_TYPE " ] ; then
export BUILD_TYPE = "Release"
fi
export EXTRA_CMAKE_FLAGS = ( " ${ EXTRA_CMAKE_FLAGS [@] } " $@ )
mkdir -p build && cd build
cmake .. -G Ninja \
-DCMAKE_BUILD_TYPE= Release \
-DCMAKE_BUILD_TYPE= " $BUILD_TYPE " \
-DENABLE_QT_TRANSLATION= ON \
-DUSE_DISCORD_PRESENCE= ON \
-DCMAKE_CXX_FLAGS= " $ARCH_FLAGS " \
@ -17,6 +17,10 @@ else
export EXTRA_CMAKE_FLAGS = ( " ${ EXTRA_CMAKE_FLAGS [@] } " -DYUZU_USE_BUNDLED_QT= OFF)
fi
if [ -z " $BUILD_TYPE " ] ; then
export BUILD_TYPE = "Release"
fi
if [ " $WINDEPLOYQT " = = "" ] ; then
echo "You must supply the WINDEPLOYQT environment variable."
exit 1
@ -38,7 +42,7 @@ export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" $@)
mkdir -p build && cd build
cmake .. -G Ninja \
-DCMAKE_BUILD_TYPE= Release \
-DCMAKE_BUILD_TYPE= " $BUILD_TYPE " \
-DENABLE_QT_TRANSLATION= ON \
-DUSE_DISCORD_PRESENCE= ON \
-DYUZU_USE_BUNDLED_SDL2= OFF \
@ -216,18 +216,16 @@ bool DecoderContext::OpenContext(const Decoder& decoder) {
bool DecoderContext : : SendPacket ( const Packet & packet ) {
m_temp_frame = std : : make_shared < Frame > ( ) ;
if ( const int ret = avcodec_send_packet ( m_codec_context , packet . GetPacket ( ) ) ; ret < 0 ) {
if ( const int ret = avcodec_send_packet ( m_codec_context , packet . GetPacket ( ) ) ; ret < 0 & & ret ! = AVERROR_EOF ) {
LOG_ERROR ( HW_GPU , " avcodec_send_packet error: {} " , AVError ( ret ) ) ;
return false ;
}
return true ;
}
std : : shared_ptr < Frame > DecoderContext : : ReceiveFrame ( ) {
auto ReceiveImpl = [ & ] ( AVFrame * frame ) - > bool {
if ( const int ret = avcodec_receive_frame ( m_codec_context , frame ) ; ret < 0 ) {
if ( const int ret = avcodec_receive_frame ( m_codec_context , frame ) ; ret < 0 & & ret ! = AVERROR_EOF ) {
LOG_ERROR ( HW_GPU , " avcodec_receive_frame error: {} " , AVError ( ret ) ) ;
return false ;
}