]> git.sesse.net Git - vlc/commitdiff
Set field dominance correctly.
authorSteinar Gunderson <sgunderson@bigfoot.com>
Fri, 24 Sep 2010 21:41:43 +0000 (23:41 +0200)
committerSteinar Gunderson <sgunderson@bigfoot.com>
Fri, 24 Sep 2010 21:41:43 +0000 (23:41 +0200)
modules/access/sdi.cpp

index 7146608b8d3e631c6fd55428a81cf9426fee8f45..fa286ca89d8f9ce88d0c24b2798e170102a4bab0 100644 (file)
@@ -82,7 +82,7 @@ struct demux_sys_t
     bool b_first_frame;
 
     int i_width, i_height, i_fps_num, i_fps_den;
-    // FIXME: field dominance
+    uint32_t i_dominance_flags;
 
     int i_rate, i_channels;
 
@@ -152,7 +152,7 @@ HRESULT DeckLinkCaptureDelegate::VideoInputFrameArrived(IDeckLinkVideoInputFrame
 
         BMDTimeValue stream_time, frame_duration;
         videoFrame->GetStreamTime( &stream_time, &frame_duration, CLOCK_FREQ );
-        p_video_frame->i_flags = BLOCK_FLAG_TYPE_I;
+        p_video_frame->i_flags = BLOCK_FLAG_TYPE_I | p_sys->i_dominance_flags;
         if( p_sys->b_first_frame )
         {
             p_video_frame->i_flags |= BLOCK_FLAG_DISCONTINUITY;
@@ -297,6 +297,7 @@ static int Open( vlc_object_t *p_this )
         }
 
         const char *field_dominance;
+        uint32_t i_dominance_flags = 0;
         switch( p_display_mode->GetFieldDominance() )
         {
         case bmdProgressiveFrame:
@@ -307,9 +308,11 @@ static int Open( vlc_object_t *p_this )
             break;
         case bmdLowerFieldFirst:
             field_dominance = ", interlaced [BFF]";
+            i_dominance_flags = BLOCK_FLAG_BOTTOM_FIELD_FIRST;
             break;
         case bmdUpperFieldFirst:
             field_dominance = ", interlaced [TFF]";
+            i_dominance_flags = BLOCK_FLAG_TOP_FIELD_FIRST;
             break;
         case bmdUnknownFieldDominance:
         default:
@@ -331,6 +334,7 @@ static int Open( vlc_object_t *p_this )
             p_sys->i_height = p_display_mode->GetHeight();
             p_sys->i_fps_num = time_scale;
             p_sys->i_fps_den = frame_duration;
+            p_sys->i_dominance_flags = i_dominance_flags;
         }
     }