1
0
mirror of https://github.com/mpv-player/mpv synced 2025-03-04 05:07:51 +00:00

DOCS/client_api_examples: qtexample: resize to video size

This is pretty imperfect, but it's just a demo.

The main purpose is clarifying how and when to get the video size.

In theory, retrieving the properties this way has a race condition:
after reading dwidth, the video could resize again. But the worst that
can happen are mismatching dwidth/dheight values, and the
MPV_EVENT_VIDEO_RECONFIG event would be immediately received again,
which would fix the mismatch. You could read the full video-out-params
property to absolutely avoid it, but it's not worth the trouble.
This commit is contained in:
wm4 2014-09-15 18:38:42 +02:00
parent ac2047e02e
commit 930c61b64c

View File

@ -45,6 +45,7 @@ MainWindow::MainWindow(QWidget *parent) :
mpv_container = new QWidget(this);
setCentralWidget(mpv_container);
mpv_container->setAttribute(Qt::WA_NativeWindow);
// If you have a HWND, use: int64_t wid = (intptr_t)hwnd;
int64_t wid = mpv_container->winId();
mpv_set_option(mpv, "wid", MPV_FORMAT_INT64, &wid);
@ -84,6 +85,26 @@ void MainWindow::handle_mpv_event(mpv_event *event)
}
break;
}
case MPV_EVENT_VIDEO_RECONFIG: {
// Retrieve the new video size.
int64_t w, h;
if (mpv_get_property(mpv, "dwidth", MPV_FORMAT_INT64, &w) >= 0 &&
mpv_get_property(mpv, "dheight", MPV_FORMAT_INT64, &h) >= 0 &&
w > 0 && h > 0)
{
// Force Qt to resize the mpv window to video size. You probably
// want to do something more sophisticated here, because:
// A) it prevents the user from making the window smaller for no
// reason (I was unsure how to make Qt do the right thing)
// B) the MPV_EVENT_VIDEO_RECONFIG event doesn't necessarily imply
// a resize, and you should check yourself if the video
// dimensions really changed
// mpv itself will scale/letter box the video to the container size
// if the video doesn't fit.
mpv_container->setMinimumSize(w, h);
}
break;
}
case MPV_EVENT_SHUTDOWN: {
mpv_terminate_destroy(mpv);
mpv = NULL;