]> granicus.if.org Git - handbrake/commitdiff
QSV: better usage of crop
authorhandbrake <no-reply@handbrake.fr>
Mon, 3 Jun 2013 13:14:55 +0000 (13:14 +0000)
committerhandbrake <no-reply@handbrake.fr>
Mon, 3 Jun 2013 13:14:55 +0000 (13:14 +0000)
git-svn-id: svn://svn.handbrake.fr/HandBrake/branches/qsv@5546 b64f7644-9d1e-0410-96f1-a4d463321fa5

libhb/qsv_filter.c

index c7845e878e338e023ef1a3d9b3fbf79ac6bf8f3c..f4d4d40ccff9e0b6b82fe1876d738036bfa3b0d6 100644 (file)
@@ -144,10 +144,10 @@ static int filter_init( av_qsv_context* qsv, hb_filter_private_t * pv ){
 
         qsv_vpp->m_mfxVideoParam.vpp.In.FourCC          = qsv->dec_space->m_mfxVideoParam.mfx.FrameInfo.FourCC;
         qsv_vpp->m_mfxVideoParam.vpp.In.ChromaFormat    = qsv->dec_space->m_mfxVideoParam.mfx.FrameInfo.ChromaFormat;
-        qsv_vpp->m_mfxVideoParam.vpp.In.CropX           = qsv->dec_space->m_mfxVideoParam.mfx.FrameInfo.CropX;
-        qsv_vpp->m_mfxVideoParam.vpp.In.CropY           = qsv->dec_space->m_mfxVideoParam.mfx.FrameInfo.CropY;
-        qsv_vpp->m_mfxVideoParam.vpp.In.CropW           = pv->width_in;
-        qsv_vpp->m_mfxVideoParam.vpp.In.CropH           = pv->height_in;
+        qsv_vpp->m_mfxVideoParam.vpp.In.CropX           = pv->crop[2];
+        qsv_vpp->m_mfxVideoParam.vpp.In.CropY           = pv->crop[0];
+        qsv_vpp->m_mfxVideoParam.vpp.In.CropW           = pv->width_in - pv->crop[3] - pv->crop[2];
+        qsv_vpp->m_mfxVideoParam.vpp.In.CropH           = pv->height_in - pv->crop[1] - pv->crop[0];
         qsv_vpp->m_mfxVideoParam.vpp.In.PicStruct       = qsv->dec_space->m_mfxVideoParam.mfx.FrameInfo.PicStruct;
         qsv_vpp->m_mfxVideoParam.vpp.In.FrameRateExtN   = qsv->dec_space->m_mfxVideoParam.mfx.FrameInfo.FrameRateExtN;
         qsv_vpp->m_mfxVideoParam.vpp.In.FrameRateExtD   = qsv->dec_space->m_mfxVideoParam.mfx.FrameInfo.FrameRateExtD;
@@ -463,6 +463,12 @@ int process_frame(av_qsv_list* received_item, av_qsv_context* qsv, hb_filter_pri
                 ret = 0;
                 break;
             }
+            if (work_surface) {
+                    work_surface->Info.CropX           = pv->crop[2];
+                    work_surface->Info.CropY           = pv->crop[0];
+                    work_surface->Info.CropW           = pv->width_in - pv->crop[3] - pv->crop[2];
+                    work_surface->Info.CropH           = pv->height_in - pv->crop[1] - pv->crop[0];
+            }
 
             sts = MFXVideoVPP_RunFrameVPPAsync(qsv->mfx_session, work_surface, qsv_vpp->p_surfaces[surface_idx] , NULL, qsv_vpp->p_syncp[sync_idx]->p_sync);