vlc | branch: master | Steve Lhomme <[email protected]> | Wed Sep 12 11:39:29 2018 +0200| [195ecdd07db944098db6d59c1236c3a7eef9a874] | committer: Steve Lhomme
dxva2_deinterlace: fill the sample metadata from the source picture > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=195ecdd07db944098db6d59c1236c3a7eef9a874 --- modules/hw/d3d9/dxva2_deinterlace.c | 58 +++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/modules/hw/d3d9/dxva2_deinterlace.c b/modules/hw/d3d9/dxva2_deinterlace.c index 90b0440f31..76701d6a30 100644 --- a/modules/hw/d3d9/dxva2_deinterlace.c +++ b/modules/hw/d3d9/dxva2_deinterlace.c @@ -84,6 +84,56 @@ static void Flush(filter_t *filter) FlushDeinterlacing(&p_sys->context); } +static void FillExtendedFormat( const video_format_t *p_fmt, + DXVA2_ExtendedFormat *out ) +{ + out->NominalRange = p_fmt->b_color_range_full ? DXVA2_NominalRange_0_255 : DXVA2_NominalRange_16_235; + switch (p_fmt->space) + { + case COLOR_SPACE_BT601: + out->VideoTransferMatrix = DXVA2_VideoTransferMatrix_BT601; + break; + case COLOR_SPACE_BT709: + out->VideoTransferMatrix = DXVA2_VideoTransferMatrix_BT709; + break; + default: + out->VideoTransferMatrix = DXVA2_VideoTransferMatrix_Unknown; + break; + } + out->VideoLighting = DXVA2_VideoLighting_Unknown; + switch (p_fmt->primaries) + { + case COLOR_PRIMARIES_BT709: + out->VideoPrimaries = DXVA2_VideoPrimaries_BT709; + break; + case COLOR_PRIMARIES_BT470_BG: + out->VideoPrimaries = DXVA2_VideoPrimaries_BT470_2_SysBG; + break; + case COLOR_PRIMARIES_SMTPE_170: + out->VideoPrimaries = DXVA2_VideoPrimaries_SMPTE170M; + break; + default: + out->VideoPrimaries = DXVA2_VideoPrimaries_Unknown; + break; + } + switch (p_fmt->transfer) + { + case TRANSFER_FUNC_BT709: + out->VideoTransferFunction = DXVA2_VideoTransFunc_709; + break; + case TRANSFER_FUNC_SMPTE_240: + out->VideoTransferFunction = DXVA2_VideoTransFunc_240M; + break; + case TRANSFER_FUNC_SRGB: + out->VideoTransferFunction = DXVA2_VideoTransFunc_sRGB; + break; + default: + out->VideoTransferFunction = DXVA2_VideoTransFunc_Unknown; + break; + } + out->VideoLighting = DXVA2_VideoLighting_dim; +} + static void FillSample( DXVA2_VideoSample *p_sample, const struct deinterlace_ctx *p_context, picture_t *p_pic, @@ -97,6 +147,7 @@ static void FillSample( DXVA2_VideoSample *p_sample, p_sample->SampleFormat.SampleFormat = p_pic->b_top_field_first ? DXVA2_SampleFieldInterleavedEvenFirst : DXVA2_SampleFieldInterleavedOddFirst; + FillExtendedFormat(p_fmt, &p_sample->SampleFormat); p_sample->Start = 0; p_sample->End = GetFieldDuration(p_context, p_fmt, p_pic) * 10; p_sample->SampleData = DXVA2_SampleData_RFF_TFF_Present; @@ -110,7 +161,8 @@ static void FillSample( DXVA2_VideoSample *p_sample, static void FillBlitParams( filter_sys_t *sys, DXVA2_VideoProcessBltParams *params, const RECT *area, - const DXVA2_VideoSample *samples, int order ) + const DXVA2_VideoSample *samples, int order, + const video_format_t *fmt) { memset(params, 0, sizeof(*params)); params->TargetFrame = (samples->End - samples->Start) * order / 2; @@ -118,6 +170,7 @@ static void FillBlitParams( filter_sys_t *sys, params->DestData = 0; params->Alpha = DXVA2_Fixed32OpaqueAlpha(); params->DestFormat.SampleFormat = DXVA2_SampleProgressiveFrame; + FillExtendedFormat(fmt, ¶ms->DestFormat); params->BackgroundColor.Alpha = 0xFFFF; params->ConstrictionSize.cx = params->TargetRect.right; params->ConstrictionSize.cy = params->TargetRect.bottom; @@ -184,7 +237,7 @@ static int RenderPic( filter_t *filter, picture_t *p_outpic, picture_t *src, } } - FillBlitParams( sys, ¶ms, &area, samples, order ); + FillBlitParams( sys, ¶ms, &area, samples, order, &p_outpic->format ); hr = IDirectXVideoProcessor_VideoProcessBlt( sys->processor, sys->hw_surface, @@ -366,6 +419,7 @@ int D3D9OpenDeinterlace(vlc_object_t *obj) } dsc.OutputFrameFreq = dsc.InputSampleFreq; dsc.SampleFormat.SampleFormat = DXVA2_SampleFieldInterleavedEvenFirst; + FillExtendedFormat(&filter->fmt_out.video, &dsc.SampleFormat); UINT count = 0; hr = IDirectXVideoProcessorService_GetVideoProcessorDeviceGuids( processor, _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
