gpt4 book ai didi

c++ - gstreamermm:如何提取 Gst::PlayBin 的最后一个视频帧

转载 作者:行者123 更新时间:2023-11-30 17:04:05 26 4
gpt4 key购买 nike

我尝试使用 gstreamermm 1.0 提取视频的最后一帧,并与示例 https://github.com/GNOME/gstreamermm/blob/master/examples/media_player_gtkmm/player_window.cc 密切合作。 ,但我只得到白色像素。

如何提取流的最后一个视频帧作为原始 rgba 或 bgra 数据?

void
MediaStream::setup ()
{
player = Gst::PlayBin::create ("player");
vsink = Gst::XImageSink::create ("vsink");

player -> set_property ("video-sink", vsink);
player -> signal_video_changed () .connect (sigc::mem_fun (*this, &MediaStream::on_video_changed));
}


void
MediaStream::on_video_changed ()
{
Glib::RefPtr <Gst::Pad> pad = player -> get_video_pad (0);

if (pad)
pad -> add_probe (Gst::PAD_PROBE_TYPE_BUFFER, sigc::mem_fun (*this, &MediaStream::on_video_pad_got_buffer));
}

Gst::PadProbeReturn
MediaStream::on_video_pad_got_buffer (const Glib::RefPtr <Gst::Pad> & pad, const Gst::PadProbeInfo & data)
{
const auto width = vsink -> get_width ();
const auto height = vsink -> get_height ();


std::vector <uint8_t> image (width * height * 4);


// Got no data
data .get_buffer () -> extract (0, image .data (), image .size ());



return Gst::PAD_PROBE_OK;
}

最佳答案

错过的 C++ 的 C 版本运行良好:

const auto sample = gst_base_sink_get_last_sample (vsink -> Gst::BaseSink::gobj ());

关于c++ - gstreamermm:如何提取 Gst::PlayBin 的最后一个视频帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35936782/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com