Skip to content

Commit

Permalink
Merge 254721@main - [GStreamer][MSE][CMake] Limit video support to 10…
Browse files Browse the repository at this point in the history
…80p@30fps on RaspberryPi

https://bugs.webkit.org/show_bug.cgi?id=245270

Reviewed by Adrian Perez de Castro and Xabier Rodriguez-Calvar.

* Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
(WebCore::MediaPlayerPrivateGStreamerMSE::supportsType):
* Source/cmake/OptionsGTK.cmake:
* Source/cmake/OptionsWPE.cmake:

Canonical link: https://commits.webkit.org/254721@main

(cherry picked from commit 9d318e8)
  • Loading branch information
pgorszkowski-igalia authored and aperezdc committed Sep 23, 2022
1 parent b35b86e commit 74982ab
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 0 deletions.
Expand Up @@ -54,6 +54,22 @@
#include <wtf/URL.h>
#include <wtf/text/AtomString.h>
#include <wtf/text/AtomStringHash.h>
#include <wtf/text/StringToIntegerConversion.h>

// We shouldn't accept media that the player can't actually play.
// AAC supports up to 96 channels.
#define MEDIA_MAX_AAC_CHANNELS 96
#if USE(FULLHD_VIDEO_DECODING_LIMIT)
// Raspberry Pi only supports up to 1080p@30fps hardware video decoding.
#define MEDIA_MAX_WIDTH 1920.0f
#define MEDIA_MAX_HEIGHT 1080.0f
#define MEDIA_MAX_FRAMERATE 30.0f
#else
// Assume hardware video decoding acceleration up to 8K@60fps for the rest of the cases.
#define MEDIA_MAX_WIDTH 7680.0f
#define MEDIA_MAX_HEIGHT 4320.0f
#define MEDIA_MAX_FRAMERATE 60.0f
#endif

static const char* dumpReadyState(WebCore::MediaPlayer::ReadyState readyState)
{
Expand Down Expand Up @@ -373,6 +389,25 @@ MediaPlayer::SupportsType MediaPlayerPrivateGStreamerMSE::supportsType(const Med
return result;
}

unsigned channels = parseIntegerAllowingTrailingJunk<unsigned>(parameters.type.parameter("channels"_s)).value_or(0);
if (channels > MEDIA_MAX_AAC_CHANNELS)
return result;

bool ok;
float width = parameters.type.parameter("width"_s).toFloat(&ok);
if (!ok)
width = 0;
float height = parameters.type.parameter("height"_s).toFloat(&ok);
if (!ok)
height = 0;

if (width > MEDIA_MAX_WIDTH || height > MEDIA_MAX_HEIGHT)
return result;

float framerate = parameters.type.parameter("framerate"_s).toFloat(&ok);
if (ok && framerate > MEDIA_MAX_FRAMERATE)
return result;

GST_DEBUG("Checking mime-type \"%s\"", parameters.type.raw().utf8().data());
auto& gstRegistryScanner = GStreamerRegistryScannerMSE::singleton();
result = gstRegistryScanner.isContentTypeSupported(GStreamerRegistryScanner::Configuration::Decoding, parameters.type, parameters.contentTypesRequiringHardwareSupport);
Expand Down
2 changes: 2 additions & 0 deletions Source/cmake/OptionsGTK.cmake
Expand Up @@ -256,6 +256,8 @@ SET_AND_EXPOSE_TO_BUILD(WTF_PLATFORM_QUARTZ ${ENABLE_QUARTZ_TARGET})
SET_AND_EXPOSE_TO_BUILD(WTF_PLATFORM_X11 ${ENABLE_X11_TARGET})
SET_AND_EXPOSE_TO_BUILD(WTF_PLATFORM_WAYLAND ${ENABLE_WAYLAND_TARGET})

SET_AND_EXPOSE_TO_BUILD(USE_FULLHD_VIDEO_DECODING_LIMIT ${ENABLE_FULLHD_VIDEO_DECODING_LIMIT})

SET_AND_EXPOSE_TO_BUILD(ENABLE_PLUGIN_PROCESS FALSE)

add_definitions(-DBUILDING_GTK__=1)
Expand Down
2 changes: 2 additions & 0 deletions Source/cmake/OptionsWPE.cmake
Expand Up @@ -336,6 +336,8 @@ SET_AND_EXPOSE_TO_BUILD(USE_COORDINATED_GRAPHICS TRUE)
SET_AND_EXPOSE_TO_BUILD(USE_NICOSIA TRUE)
SET_AND_EXPOSE_TO_BUILD(HAVE_OS_DARK_MODE_SUPPORT 1)

SET_AND_EXPOSE_TO_BUILD(USE_FULLHD_VIDEO_DECODING_LIMIT ${ENABLE_FULLHD_VIDEO_DECODING_LIMIT})

# GUri is available in GLib since version 2.66, but we only want to use it if version is >= 2.67.1.
if (PC_GLIB_VERSION VERSION_GREATER "2.67.1" OR PC_GLIB_VERSION STREQUAL "2.67.1")
SET_AND_EXPOSE_TO_BUILD(HAVE_GURI 1)
Expand Down

0 comments on commit 74982ab

Please sign in to comment.