# HG changeset patch # User Ritor1 # Date 1392718700 -21600 # Node ID c69013c186c77eb5462f7e79cfcf04798726dfe2 # Parent 7dccb5752b66f6538c6b6a8b9de85326bae017a7 for video diff -r 7dccb5752b66 -r c69013c186c7 Mouse.cpp --- a/Mouse.cpp Mon Feb 17 19:41:49 2014 +0600 +++ b/Mouse.cpp Tue Feb 18 16:18:20 2014 +0600 @@ -99,7 +99,7 @@ if ( pRenderer->LockSurface_DDraw4(pRenderer->pBackBuffer4, &Dst, DDLOCK_WAIT) ) { - unsigned __int8 * v6 = pIcons_LOD->pTextures[this->uCursorTextureID].pLevelOfDetail0_prolly_alpha_mask; + unsigned __int8 *v6 = pIcons_LOD->pTextures[this->uCursorTextureID].pLevelOfDetail0_prolly_alpha_mask; void *surface = Dst.lpSurface; __int32 v12 = 2 * (Dst.lPitch / 2 - texture.uTextureWidth); diff -r 7dccb5752b66 -r c69013c186c7 Render.cpp --- a/Render.cpp Mon Feb 17 19:41:49 2014 +0600 +++ b/Render.cpp Tue Feb 18 16:18:20 2014 +0600 @@ -2175,16 +2175,16 @@ lineB = (char *)lineRGB + 2 * pitch; for ( uint x = 0; x < this->GetRenderWidth(); x++ ) { - int p = *line_picture_data; //0x2818 - int for_rad = (pRenderer->uTargetGBits + pRenderer->uTargetBBits );//16 = 8 + 8 - int value = (pRenderer->uTargetRMask & *line_picture_data);//0 = 0xFF0000 & 0x2818 - int result = (pRenderer->uTargetRMask & *line_picture_data) >> (pRenderer->uTargetGBits + pRenderer->uTargetBBits ); + //int p = *line_picture_data; //0x2818 + //int for_rad = (pRenderer->uTargetGBits + pRenderer->uTargetBBits );//16 = 8 + 8 + //int value = (pRenderer->uTargetRMask & *line_picture_data);//0 = 0xFF0000 & 0x2818 + //int result = (pRenderer->uTargetRMask & *line_picture_data) >> (pRenderer->uTargetGBits + pRenderer->uTargetBBits ); lineRGB[x] = (pRenderer->uTargetRMask & *line_picture_data) >> (pRenderer->uTargetGBits + pRenderer->uTargetBBits );// + pRenderer->uTargetRBits - 8); lineG[x] = (pRenderer->uTargetGMask & *line_picture_data) >> (pRenderer->uTargetBBits);// + pRenderer->uTargetGBits - 8); - int value2 = (pRenderer->uTargetGMask & *line_picture_data); //10240 = 0xFF00 & 0x2818 - int result2 = (pRenderer->uTargetGMask & *line_picture_data) >> (pRenderer->uTargetBBits); + //int value2 = (pRenderer->uTargetGMask & *line_picture_data); //10240 = 0xFF00 & 0x2818 + //int result2 = (pRenderer->uTargetGMask & *line_picture_data) >> (pRenderer->uTargetBBits); lineB[x] = (pRenderer->uTargetBMask & *line_picture_data);// << (8 - pRenderer->uTargetBBits); - int value3 = (pRenderer->uTargetBMask & *line_picture_data);//24 = 0xFF & 0x2818 + //int value3 = (pRenderer->uTargetBMask & *line_picture_data);//24 = 0xFF & 0x2818 line_picture_data += 2; } } diff -r 7dccb5752b66 -r c69013c186c7 VideoPlayer.cpp --- a/VideoPlayer.cpp Mon Feb 17 19:41:49 2014 +0600 +++ b/VideoPlayer.cpp Tue Feb 18 16:18:20 2014 +0600 @@ -879,8 +879,8 @@ if (pMovie->Stopped())//видео завершено/перезагрузка { - int width = pMovie->GetWidth(); - int height = pMovie->GetHeight(); + int width = game_viewport_width;//pMovie->GetWidth(); + int height = game_viewport_height;//pMovie->GetHeight(); delete pMovie; SetFilePointer(hVidFile, uOffset, nullptr, FILE_BEGIN); @@ -890,11 +890,29 @@ else { - auto image = pPlayer->DoFrame(); + char *image = pPlayer->DoFrame(); if (image) { - memcpy(pRenderer->pTargetSurface, image, 480 * 480 * 4);//запись кадра на экран + int num_r_bits = 5; + int num_g_bits = 6; + int num_b_bits = 5; + + int r_mask = 0xF800; + int g_mask = 0x7E0; + int b_mask = 0x1F; + //memcpy(pRenderer->pTargetSurface, image, 480 * 480 * 4);//запись кадра на экран + for (unsigned int y = 8; y < 8 + game_viewport_height; ++y) + { + for (unsigned int x = 8; x < 8 + game_viewport_width; ++x) + { + pRenderer->WritePixel16(x, y, image[((x - 8) + ((y - 8)*game_viewport_width))*4]);//4 - это шаг + //auto p = (unsigned __int32 *)pRenderer->pTargetSurface + x + y * pRenderer->uTargetSurfacePitch; + //*p = ((0xFF0000 & image[((x - 8) + ((y - 8)*game_viewport_width))*4]) >> (8 + 8)) + // + ((0xFF00 & image[(((x - 8) + ((y - 8)*game_viewport_width))*4]) >> 8) + // + (0xFF & image[((x - 8) + ((y - 8)*game_viewport_width))*4]); + } + } delete[] image; } } diff -r 7dccb5752b66 -r c69013c186c7 VideoPlayer.h --- a/VideoPlayer.h Mon Feb 17 19:41:49 2014 +0600 +++ b/VideoPlayer.h Tue Feb 18 16:18:20 2014 +0600 @@ -586,6 +586,11 @@ video_stream_idx = OpenStream(AVMEDIA_TYPE_VIDEO, &video_stream, &video_stream_dec, &video_stream_dec_ctx); if (video_stream_idx < 0) return Release(), false; + if (_stricmp("binkvideo", video_stream_dec->name) )//Ritor1: include + { + this->width = video_stream_dec_ctx->width; + this->height = video_stream_dec_ctx->height; + } audio_stream_idx = OpenStream(AVMEDIA_TYPE_AUDIO, &audio_stream, &audio_stream_dec, &audio_stream_dec_ctx); if (audio_stream_idx < 0) @@ -745,8 +750,16 @@ { if (movie->LoadFromLOD(h, readFunction, seekFunction, width, height)) { - current_movie_width = width; - current_movie_height = height; + if (_stricmp("binkvideo", movie->video_stream_dec->name) ) + { + current_movie_width = movie->video_stream_dec_ctx->width; + current_movie_height = movie->video_stream_dec_ctx->height; + } + else + { + current_movie_width = width; + current_movie_height = height; + } return current_movie = movie; } delete movie;