SDL2嵌入QT子窗口-- windows

windwos下SDL2+QT+FFMPEG的简易播放器
主要验证SDL2嵌入QT控件播放的功能!完整工程下载。

嵌入QT控件的关键代码:

SDL_Window *screen = SDL_CreateWindowFrom((void*)ui->frame->winId());

建议SDL2的初始化和渲染放在主线程,子线程只负责解码

防止鼠标点击其他地方导致播放的图像闪烁,需要重载void paintEvent(QPaintEvent *e);

void MainWindow::paintEvent(QPaintEvent *e)
{
    ui->frame->setUpdatesEnabled(false);
}

防止全屏后黑屏需要添加:(黑屏是因为winId是变化的导致的)

SDL_ShowWindow(screen);

播放速度使用SDL2自定义事件+SDL2线程控制。

//Refresh Event
#define SFM_REFRESH_EVENT  (SDL_USEREVENT + 1)

#define SFM_BREAK_EVENT  (SDL_USEREVENT + 2)

int thread_exit=0;
int thread_pause=0;

int sfp_refresh_thread(void *opaque){
    thread_exit=0;
    thread_pause=0;

    while (!thread_exit) {
        if(!thread_pause){
            SDL_Event event;
            event.type = SFM_REFRESH_EVENT;
            SDL_PushEvent(&event);
        }
        SDL_Delay(40);
    }
    thread_exit=0;
    thread_pause=0;
    //Break
    SDL_Event event;
    event.type = SFM_BREAK_EVENT;
    SDL_PushEvent(&event);

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值