[prev in list] [next in list] [prev in thread] [next in thread] 

List:       xine-devel
Subject:    [xine-devel] [PATCH][xine-lib-1.2]
From:       Christophe Thommeret <hftom () free ! fr>
Date:       2010-04-17 7:58:38
Message-ID: 201004170958.38225.hftom () free ! fr
[Download RAW message or body]

Fixes field interlace refframes + skipped frames.

-- 
Christophe Thommeret

["field_interlace+skipped_frame.diff" (text/x-patch)]

diff -r cb99a1abe986 src/video_dec/libvdpau/vdpau_vc1.c
--- a/src/video_dec/libvdpau/vdpau_vc1.c	Fri Apr 09 18:55:47 2010 +0200
+++ b/src/video_dec/libvdpau/vdpau_vc1.c	Fri Apr 16 15:41:50 2010 +0200
@@ -624,20 +624,6 @@
 
 
 
-static void duplicate_image( vdpau_vc1_decoder_t *vd, vo_frame_t *dst )
-{
-  lprintf("duplicate_image\n");
-  sequence_t *seq = (sequence_t*)&vd->sequence;
-  picture_t *pic = (picture_t*)&seq->picture;
-
-  if ( !seq->backward_ref ) /* Should not happen! */
-    return;
-
-  dst->proc_duplicate_frame_data( dst, seq->backward_ref );
-}
-
-
-
 static void decode_render( vdpau_vc1_decoder_t *vd, vdpau_accel_t *accel, uint8_t *buf, int len )
 {
   sequence_t *seq = (sequence_t*)&vd->sequence;
@@ -690,9 +676,14 @@
         pic->vdp_infos.forward_reference = VDP_INVALID_HANDLE;
         break;
       case FIELDS_I_P:
+        pic->vdp_infos.forward_reference = accel->surface;
+        pic->vdp_infos.picture_type = P_FRAME;
+        break;
       case FIELDS_P_P:
-        pic->vdp_infos.forward_reference = accel->surface;
-        pic->vdp_infos.picture_type = P_FRAME; break;
+        if ( seq->backward_ref )
+          pic->vdp_infos.forward_reference = ((vdpau_accel_t*)seq->backward_ref->accel_data)->surface;
+        pic->vdp_infos.picture_type = P_FRAME;
+        break;
       case FIELDS_B_B:
       case FIELDS_BI_B:
         pic->vdp_infos.picture_type = B_FRAME;
@@ -778,6 +769,9 @@
       pic->skipped = 1;
   }
 
+  if ( pic->skipped )
+    pic->vdp_infos.picture_type = P_FRAME;
+
   if ( pic->vdp_infos.interlace && pic->vdp_infos.frame_coding_mode == PICTURE_FIELD_INTERLACE ) {
     if ( !(field = search_field( vd, buf, len )) )
       lprintf("error, no fields found!\n");
@@ -834,10 +828,7 @@
     vd->decoder = VDP_INVALID_HANDLE;
   }
 
-  if ( pic->skipped )
-    duplicate_image( vd, img );
-  else
-    decode_render( vd, accel, buf, len );
+  decode_render( vd, accel, buf, len );
 
 
 #ifdef MAKE_DAT


------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev

_______________________________________________
xine-devel mailing list
xine-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/xine-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic