static int64_t video_opengl_newframe(glw_video_t *gv, video_decoder_t *vd, int flags) { hts_mutex_assert(&gv->gv_surface_mutex); glw_video_surface_t *gvs; while((gvs = TAILQ_FIRST(&gv->gv_parked_queue)) != NULL) { TAILQ_REMOVE(&gv->gv_parked_queue, gvs, gvs_link); surface_init(gv, gvs); } glw_need_refresh(gv->w.glw_root, 0); gv_color_matrix_update(gv); return glw_video_newframe_blend(gv, vd, flags, &gv_surface_pixmap_release, 1); }
static int64_t gvv_newframe(glw_video_t *gv, video_decoder_t *vd0, int flags) { video_decoder_t *vd = gv->gv_vd; media_pipe_t *mp = gv->gv_mp; gv->gv_cmatrix_cur[0] = (gv->gv_cmatrix_cur[0] * 3.0f + gv->gv_cmatrix_tgt[0]) / 4.0f; if(flags & GLW_REINITIALIZE_VDPAU) { int i; for(i = 0; i < GLW_VIDEO_MAX_SURFACES; i++) gv->gv_surfaces[i].gvs_vdpau_surface = VDP_INVALID_HANDLE; gv->gv_engine = NULL; mp_send_cmd(mp, &mp->mp_video, MB_CTRL_REINITIALIZE); drain(gv, &gv->gv_displaying_queue); drain(gv, &gv->gv_decoded_queue); hts_cond_signal(&gv->gv_avail_queue_cond); return AV_NOPTS_VALUE; } glw_video_surface_t *gvs; while((gvs = TAILQ_FIRST(&gv->gv_parked_queue)) != NULL) { TAILQ_REMOVE(&gv->gv_parked_queue, gvs, gvs_link); surface_init(gv, gvs); } glw_need_refresh(gv->w.glw_root, 0); return glw_video_newframe_blend(gv, vd, flags, &gv_surface_pixmap_release, 1); }
static int64_t yuvp_newframe(glw_video_t *gv, video_decoder_t *vd, int flags) { gv_color_matrix_update(gv); return glw_video_newframe_blend(gv, vd, flags, &gv_surface_pixmap_release, 1); }