From 0623d3608a91d8d4807edeee166077ea2a03ed43 Mon Sep 17 00:00:00 2001
From: deva <deva>
Date: Tue, 19 Apr 2005 22:00:18 +0000
Subject: A hard days night... got some greenish display in the player...! -

---
 src/player.cc | 76 +++++++++++++++++++++++++++++++++++++++++++----------------
 1 file changed, 56 insertions(+), 20 deletions(-)

(limited to 'src')

diff --git a/src/player.cc b/src/player.cc
index fe02b01..684e571 100644
--- a/src/player.cc
+++ b/src/player.cc
@@ -91,7 +91,7 @@ void Player::player()
   SDL_Rect rect;
   Frame *frame;
 
-  //  unsigned char pixel_buffer[720 * 576 * 3];
+  unsigned char pixel_buffer[3][720 * 576];
   unsigned char *pxs[3];
   int pitches[3];
 
@@ -106,21 +106,9 @@ void Player::player()
   rect.w = DISPLAYWIDTH;
   rect.h = DISPLAYHEIGHT;
 
-  // Reference to the overlay pixels/pitches.
-  for(i = 0; i < 3; i++) {
-    pxs[i] = overlay->pixels[i];
-    pitches[i] = overlay->pitches[i];
-  }
-
-	dv_decoder_t *decoder = dv_decoder_new(0/*this value is unused*/, FALSE, FALSE);
- 	decoder->quality = DV_QUALITY_BEST;
-  // PAL/IEC 68134
-  decoder->system = e_dv_system_625_50;
-  decoder->std = e_dv_std_iec_61834;
-
-  // PAL/SMPTE 314M
-  //  decoder->system = e_dv_system_625_50;
-  //  decoder->std = e_dv_std_smpte_314m;  
+  bool first = true;
+	dv_decoder_t *decoder = dv_decoder_new(FALSE/*this value is unused*/, FALSE, FALSE);
+  decoder->quality = DV_QUALITY_BEST;
 
   while(*running) {
     // Wait for the semaphore to be free... then run
@@ -146,17 +134,63 @@ void Player::player()
       pthread_mutex_unlock(mutex);
       if(!frame) break;
       
+      if(first) {
+        for(i = 0; i < 3; i++) {
+          pxs[i] = overlay->pixels[i];
+          pitches[i] = overlay->pitches[i];
+        }
+
+        fprintf(stderr, "pitch[0]: %d - pitch[1]: %d - pitch[2]: %d\n", pitches[0], pitches[1], pitches[2]); fflush(stderr);
+
+        dv_parse_header(decoder, frame->data);
+        dv_parse_packs(decoder, frame->data);
+
+        //        dv_parse_header(decoder, NULL);
+        //        dv_parse_packs(decoder, NULL);
+        // PAL/IEC 68134
+        decoder->sampling = e_dv_sample_422;
+
+        /*
+        decoder->system = e_dv_system_625_50;
+        decoder->std = e_dv_std_iec_61834;
+        
+        decoder->height = DISPLAYHEIGHT;
+        decoder->width = DISPLAYWIDTH;
+        */
+        // PAL/SMPTE 314M
+        //        decoder->system = e_dv_system_625_50; 
+       //        decoder->std = e_dv_std_smpte_314m;  
+        
+        //        decoder->system = e_dv_system_none; 
+        //        decoder->std = e_dv_std_none;
+
+        // Reference to the overlay pixels/pitches.
+        //        pitches[0] = overlay->pitches[0] = decoder->width * 2;
+        //        pxs[2] = pxs[1] = pxs[0] = overlay->pixels[0] = overlay->pixels[2] = overlay->pixels[1];// = (uint8_t*)pixel_buffer;
+        //  pitches[1] = overlay->pitches[1] = 0;// = 0;
+        //  pitches[2] = overlay->pitches[2] = 0;// = 0;
+        
+        //  pitches[0] = overlay->pitches[0] = DISPLAYWIDTH;
+        first = false;
+      }
+      
       fprintf(stderr, "[%d]", dv_is_PAL(decoder)); fflush(stderr);
 
-      // libdv img decode
+      SDL_LockYUVOverlay(overlay);	
+
+      // libdv img decode to yuv
 			dv_decode_full_frame(decoder, 
                            frame->data, 
                            e_dv_color_yuv, 
-                           pxs, 
+                           pxs,
                            pitches);
 
-      SDL_LockYUVOverlay(overlay);	
-      overlay->pixels = pxs;
+      overlay->pitches[0] = pitches[0];
+      overlay->pitches[1] = pitches[1];
+      overlay->pitches[2] = pitches[2];
+
+      //overlay->pixels = pxs;
+
       SDL_UnlockYUVOverlay(overlay);
       SDL_DisplayYUVOverlay(overlay, &rect);
       //      delete frame;
@@ -171,6 +205,8 @@ void Player::player()
       break;
     }
   }
+  if(decoder) dv_decoder_free(decoder);
+
   /* Remove any late buffer */
   /* We don't care, the encoder finishes them all */
   ts.tv_sec = 0;
-- 
cgit v1.2.3