From a0530f4ab42c5e9dbd1b21e5a44c95d208254c55 Mon Sep 17 00:00:00 2001 From: Laurent Aimar Date: Mon, 19 Jul 2010 21:58:47 +0200 Subject: [PATCH] Factorized Direct3DLockSurface/DirectXLock. There is a little difference in Direct3DLockSurface as it now also sets the height field, but it should have no functionnal changes. --- modules/video_output/msw/common.c | 33 +++++++++++++++++++++++++++++ modules/video_output/msw/common.h | 1 + modules/video_output/msw/direct3d.c | 24 +-------------------- modules/video_output/msw/directx.c | 26 +---------------------- 4 files changed, 36 insertions(+), 48 deletions(-) diff --git a/modules/video_output/msw/common.c b/modules/video_output/msw/common.c index dbcf984fd5..1ec4994b16 100644 --- a/modules/video_output/msw/common.c +++ b/modules/video_output/msw/common.c @@ -214,6 +214,39 @@ void CommonDisplay(vout_display_t *vd) sys->is_first_display = false; } +/** + * It updates a picture data/pitches. + */ +void CommonUpdatePicture(picture_t *picture, + uint8_t *data, unsigned pitch) +{ + /* fill in buffer info in first plane */ + picture->p->p_pixels = data; + picture->p->i_pitch = pitch; + picture->p->i_lines = picture->format.i_height; + + /* Fill chroma planes for planar YUV */ + if (picture->format.i_chroma == VLC_CODEC_I420 || + picture->format.i_chroma == VLC_CODEC_J420 || + picture->format.i_chroma == VLC_CODEC_YV12) { + + for (int n = 1; n < picture->i_planes; n++) { + const plane_t *o = &picture->p[n-1]; + plane_t *p = &picture->p[n]; + + p->p_pixels = o->p_pixels + o->i_lines * o->i_pitch; + p->i_pitch = pitch / 2; + p->i_lines = picture->format.i_height / 2; + } + /* The dx/d3d buffer is always allocated as YV12 */ + if (vlc_fourcc_AreUVPlanesSwapped(picture->format.i_chroma, VLC_CODEC_YV12)) { + uint8_t *p_tmp = picture->p[1].p_pixels; + picture->p[1].p_pixels = picture->p[2].p_pixels; + picture->p[2].p_pixels = p_tmp; + } + } +} + void AlignRect(RECT *r, int align_boundary, int align_size) { if (align_boundary) diff --git a/modules/video_output/msw/common.h b/modules/video_output/msw/common.h index 2eb54c91d5..10988df241 100644 --- a/modules/video_output/msw/common.h +++ b/modules/video_output/msw/common.h @@ -237,6 +237,7 @@ void CommonClean(vout_display_t *); void CommonManage(vout_display_t *); int CommonControl(vout_display_t *, int , va_list ); void CommonDisplay(vout_display_t *); +void CommonUpdatePicture(picture_t *, uint8_t *, unsigned); void UpdateRects (vout_display_t *, const vout_display_cfg_t *, diff --git a/modules/video_output/msw/direct3d.c b/modules/video_output/msw/direct3d.c index 14f2bc950c..161693748e 100644 --- a/modules/video_output/msw/direct3d.c +++ b/modules/video_output/msw/direct3d.c @@ -761,29 +761,7 @@ static int Direct3DLockSurface(picture_t *picture) return VLC_EGENERIC; } - /* fill in buffer info in first plane */ - picture->p->p_pixels = d3drect.pBits; - picture->p->i_pitch = d3drect.Pitch; - - /* Fill chroma planes for planar YUV */ - if (picture->format.i_chroma == VLC_CODEC_I420 || - picture->format.i_chroma == VLC_CODEC_J420 || - picture->format.i_chroma == VLC_CODEC_YV12) { - - for (int n = 1; n < picture->i_planes; n++) { - const plane_t *o = &picture->p[n-1]; - plane_t *p = &picture->p[n]; - - p->p_pixels = o->p_pixels + o->i_lines * o->i_pitch; - p->i_pitch = d3drect.Pitch / 2; - } - /* The d3d buffer is always allocated as YV12 */ - if (vlc_fourcc_AreUVPlanesSwapped(picture->format.i_chroma, VLC_CODEC_YV12)) { - uint8_t *p_tmp = picture->p[1].p_pixels; - picture->p[1].p_pixels = picture->p[2].p_pixels; - picture->p[2].p_pixels = p_tmp; - } - } + CommonUpdatePicture(picture, d3drect.pBits, d3drect.Pitch); return VLC_SUCCESS; } /** diff --git a/modules/video_output/msw/directx.c b/modules/video_output/msw/directx.c index b53ea84197..4e3da313c9 100644 --- a/modules/video_output/msw/directx.c +++ b/modules/video_output/msw/directx.c @@ -1223,31 +1223,7 @@ static int DirectXLock(picture_t *picture) picture->p_sys->surface, &ddsd)) return VLC_EGENERIC; - /* fill in buffer info in first plane */ - picture->p->p_pixels = ddsd.lpSurface; - picture->p->i_pitch = ddsd.lPitch; - picture->p->i_lines = picture->format.i_height; - - /* Fill chroma planes for planar YUV */ - if (picture->format.i_chroma == VLC_CODEC_I420 || - picture->format.i_chroma == VLC_CODEC_J420 || - picture->format.i_chroma == VLC_CODEC_YV12) { - - for (int n = 1; n < picture->i_planes; n++) { - const plane_t *o = &picture->p[n-1]; - plane_t *p = &picture->p[n]; - - p->p_pixels = o->p_pixels + o->i_lines * o->i_pitch; - p->i_pitch = ddsd.lPitch / 2; - p->i_lines = picture->format.i_height / 2; - } - /* The dx buffer is always allocated as YV12 */ - if (vlc_fourcc_AreUVPlanesSwapped(picture->format.i_chroma, VLC_CODEC_YV12)) { - uint8_t *p_tmp = picture->p[1].p_pixels; - picture->p[1].p_pixels = picture->p[2].p_pixels; - picture->p[2].p_pixels = p_tmp; - } - } + CommonUpdatePicture(picture, ddsd.lpSurface, ddsd.lPitch); return VLC_SUCCESS; } static void DirectXUnlock(picture_t *picture) -- 2.39.2