From 0623d3608a91d8d4807edeee166077ea2a03ed43 Mon Sep 17 00:00:00 2001 From: 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(-) 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