mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-14 11:49:59 +01:00
BugFix MediaPlayer support for GIF animation
Playbin needs a videorate video filter, and thus user cannot change the video effect on a GIF
This commit is contained in:
@@ -68,6 +68,7 @@ MediaPlayer::MediaPlayer()
|
|||||||
rate_change_ = RATE_CHANGE_NONE;
|
rate_change_ = RATE_CHANGE_NONE;
|
||||||
decoder_name_ = "";
|
decoder_name_ = "";
|
||||||
video_filter_ = "";
|
video_filter_ = "";
|
||||||
|
video_filter_available_ = true;
|
||||||
position_ = GST_CLOCK_TIME_NONE;
|
position_ = GST_CLOCK_TIME_NONE;
|
||||||
loop_ = LoopMode::LOOP_REWIND;
|
loop_ = LoopMode::LOOP_REWIND;
|
||||||
|
|
||||||
@@ -346,8 +347,10 @@ void MediaPlayer::execute_open()
|
|||||||
g_object_set( G_OBJECT (pipeline_), "flags", flags, NULL);
|
g_object_set( G_OBJECT (pipeline_), "flags", flags, NULL);
|
||||||
|
|
||||||
// hack to compensate for lack of PTS in gif animations
|
// hack to compensate for lack of PTS in gif animations
|
||||||
if (media_.codec_name.compare("image/gst-libav-gif") == 0)
|
if (media_.codec_name.compare("image/gst-libav-gif") == 0) {
|
||||||
video_filter_ = "videorate";
|
video_filter_ = "videorate rate=1.0";
|
||||||
|
video_filter_available_ = false;
|
||||||
|
}
|
||||||
|
|
||||||
// Add a filter to playbin if provided
|
// Add a filter to playbin if provided
|
||||||
if ( !video_filter_.empty()) {
|
if ( !video_filter_.empty()) {
|
||||||
|
|||||||
@@ -258,6 +258,7 @@ public:
|
|||||||
* */
|
* */
|
||||||
void setVideoEffect(const std::string &pipeline_element);
|
void setVideoEffect(const std::string &pipeline_element);
|
||||||
inline std::string videoEffect() { return video_filter_; }
|
inline std::string videoEffect() { return video_filter_; }
|
||||||
|
inline bool videoEffectAvailable() { return video_filter_available_; }
|
||||||
/**
|
/**
|
||||||
* Accept visitors
|
* Accept visitors
|
||||||
* */
|
* */
|
||||||
@@ -302,6 +303,7 @@ private:
|
|||||||
bool rewind_on_disable_;
|
bool rewind_on_disable_;
|
||||||
bool force_software_decoding_;
|
bool force_software_decoding_;
|
||||||
std::string decoder_name_;
|
std::string decoder_name_;
|
||||||
|
bool video_filter_available_;
|
||||||
std::string video_filter_;
|
std::string video_filter_;
|
||||||
|
|
||||||
// Play speed
|
// Play speed
|
||||||
|
|||||||
@@ -376,7 +376,8 @@ void SourceControlWindow::Render()
|
|||||||
{
|
{
|
||||||
if (ImGui::MenuItem( ICON_FA_REDO_ALT " Reload" ))
|
if (ImGui::MenuItem( ICON_FA_REDO_ALT " Reload" ))
|
||||||
mediaplayer_active_->reopen();
|
mediaplayer_active_->reopen();
|
||||||
if (ImGuiToolkit::MenuItemIcon(16, 16, "Gstreamer effect") )
|
if (ImGuiToolkit::MenuItemIcon(16, 16, "Gstreamer effect", nullptr,
|
||||||
|
false, mediaplayer_active_->videoEffectAvailable()) )
|
||||||
mediaplayer_edit_pipeline_ = true;
|
mediaplayer_edit_pipeline_ = true;
|
||||||
if (ImGui::BeginMenu(ICON_FA_SNOWFLAKE " On deactivation"))
|
if (ImGui::BeginMenu(ICON_FA_SNOWFLAKE " On deactivation"))
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user