From: Laurent Aimar Date: Sat, 26 Sep 2009 11:55:24 +0000 (+0200) Subject: Used direct rendering for chroma conversion in "vout display". X-Git-Tag: 1.1.0-ff~3193 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=654d8a729f89d7b58589a621e206e0bf05015f71;p=vlc Used direct rendering for chroma conversion in "vout display". --- diff --git a/src/video_output/display.c b/src/video_output/display.c index 4bfe485c10..40c42136e2 100644 --- a/src/video_output/display.c +++ b/src/video_output/display.c @@ -47,14 +47,14 @@ static void SplitterClose(vout_display_t *vd); *****************************************************************************/ static picture_t *VideoBufferNew(filter_t *filter) { + vout_display_t *vd = (vout_display_t*)filter->p_owner; const video_format_t *fmt = &filter->fmt_out.video; - picture_t *picture = picture_New(fmt->i_chroma, - fmt->i_width, fmt->i_height, - fmt->i_aspect); - if (!picture) - msg_Err(filter, "Failed to allocate picture"); - return picture; + assert(vd->fmt.i_chroma == fmt->i_chroma && + vd->fmt.i_width == fmt->i_width && + vd->fmt.i_height == fmt->i_height); + + return vout_display_Get(vd); } static void VideoBufferDelete(filter_t *filter, picture_t *picture) { @@ -62,12 +62,11 @@ static void VideoBufferDelete(filter_t *filter, picture_t *picture) picture_Release(picture); } -static int FilterAllocationInit(filter_t *filter, void *data) +static int FilterAllocationInit(filter_t *filter, void *vd) { - VLC_UNUSED(data); - filter->pf_vout_buffer_new = VideoBufferNew; filter->pf_vout_buffer_del = VideoBufferDelete; + filter->p_owner = vd; return VLC_SUCCESS; } @@ -75,6 +74,7 @@ static void FilterAllocationClean(filter_t *filter) { filter->pf_vout_buffer_new = NULL; filter->pf_vout_buffer_del = NULL; + filter->p_owner = NULL; } /***************************************************************************** @@ -379,7 +379,7 @@ static void VoutDisplayCreateRender(vout_display_t *vd) osys->filters = filter_chain_New(vd, "video filter2", false, FilterAllocationInit, - FilterAllocationClean, NULL); + FilterAllocationClean, vd); assert(osys->filters); /* TODO critical */ /* */ @@ -849,8 +849,7 @@ picture_t *vout_FilterDisplay(vout_display_t *vd, picture_t *picture) { vout_display_owner_sys_t *osys = vd->owner.sys; - if (!osys->filters) - return picture; + assert(osys->filters); return filter_chain_VideoFilter(osys->filters, picture); } @@ -1137,6 +1136,7 @@ static void SplitterPrepare(vout_display_t *vd, picture_t *picture) for (int i = 0; i < sys->count; i++) { /* */ + /* FIXME now vout_FilterDisplay already return a direct buffer FIXME */ sys->picture[i] = vout_FilterDisplay(sys->display[i], sys->picture[i]); if (!sys->picture[i]) continue;