wfreerdp-server: Nearly completed refactoring
authorC-o-r-E <can.of.tuna@gmail.com>
Sat, 18 Aug 2012 23:46:42 +0000 (19:46 -0400)
committerC-o-r-E <can.of.tuna@gmail.com>
Sat, 18 Aug 2012 23:46:42 +0000 (19:46 -0400)
server/Windows/wf_info.c
server/Windows/wf_info.h
server/Windows/wf_peer.c
server/Windows/wf_peer.h
server/Windows/wfreerdp.c

index bfde742..2f23722 100644 (file)
@@ -226,3 +226,15 @@ void wf_info_find_invalid_region(wfInfo* info)
        ReleaseMutex(info->mutex);\r
 }\r
 \r
+\r
+void wf_info_clear_invalid_region(wfInfo* info)\r
+{\r
+       \r
+       WaitForSingleObject(info->mutex, INFINITE); \r
+       info->lastUpdate = info->nextUpdate;\r
+       info->invalid_x1 = info->width;\r
+       info->invalid_x2 = 0;\r
+       info->invalid_y1 = info->height;\r
+       info->invalid_y2 = 0;\r
+       ReleaseMutex(info->mutex);\r
+}\r
index 072b963..5755ece 100644 (file)
@@ -62,6 +62,7 @@ BOOL wf_info_have_updates(wfInfo* info);
 void wf_info_updated(wfInfo* info);\r
 void wf_info_update_changes(wfInfo* info);\r
 void wf_info_find_invalid_region(wfInfo* info);\r
+void wf_info_clear_invalid_region(wfInfo* info);\r
 \r
 \r
 #endif
\ No newline at end of file
index 7097c9c..721d86d 100644 (file)
@@ -66,48 +66,10 @@ static DWORD WINAPI wf_peer_mirror_monitor(LPVOID lpParam)
                        if(wf_info_have_updates(wfInfoSingleton))\r
                        {\r
                                wf_info_find_invalid_region(wfInfoSingleton);\r
-                               printf("Fake Encode!\n");\r
+                               //printf("Fake Encode!\n");\r
+                               wf_rfx_encode(client);\r
                        }                       
-               }
-
-
-               /*
-               dRes = WaitForSingleObject(\r
-                       wfInfoSingleton->mutex,    // handle to mutex\r
-            INFINITE);  // no time-out interval\r
-               switch(dRes)\r
-               {\r
-                       case WAIT_OBJECT_0:\r
-                               if(wfInfoSingleton->subscribers > 0)\r
-                               {\r
-                                       wfInfoSingleton->nextUpdate = buf->buffer->counter; ///////////////////////////// \r
-                                       //_tprintf(_T("Count = %lu\n"), wfInfoSingleton->nextUpdate);\r
-\r
-\r
-                                       //todo: modulus\r
-                                       //need to go through the "queue"\r
-                                       for(i = wfInfoSingleton->lastUpdate; i <= wfInfoSingleton->nextUpdate; ++i)\r
-                                       {\r
-                                               wfInfoSingleton->invalid_x1 = min(wfInfoSingleton->invalid_x1, buf->buffer->pointrect[i].rect.left);\r
-                                               wfInfoSingleton->invalid_x2 = max(wfInfoSingleton->invalid_x2, buf->buffer->pointrect[i].rect.right);\r
-                                               wfInfoSingleton->invalid_y1 = min(wfInfoSingleton->invalid_y1, buf->buffer->pointrect[i].rect.top);\r
-                                               wfInfoSingleton->invalid_y2 = max(wfInfoSingleton->invalid_y2, buf->buffer->pointrect[i].rect.bottom);\r
-                                       }///////////////////////////////\r
-\r
-                                       wf_rfx_encode(client);\r
-                               }\r
-\r
-                               if (! ReleaseMutex(wfInfoSingleton->mutex)) \r
-                               { \r
-                                       _tprintf(_T("Error releasing mutex\n"));\r
-                               } \r
-\r
-                               break;\r
-\r
-                       default:\r
-                               _tprintf(_T("Error waiting for mutex: %d\n"), dRes);\r
                }\r
-               */\r
 \r
                end = GetTickCount();\r
                diff = end - start;
@@ -117,10 +79,6 @@ static DWORD WINAPI wf_peer_mirror_monitor(LPVOID lpParam)
                        Sleep(rate - diff);
                }\r
                \r
-\r
-               //Sleep(42);\r
-               //freerdp_usleep(41667);\r
-               \r
        }\r
 \r
        _tprintf(_T("monitor thread terminating...\n"));\r
@@ -199,6 +157,7 @@ void wf_rfx_encode(freerdp_peer* client)
        SURFACE_BITS_COMMAND* cmd;\r
        GETCHANGESBUF* buf;\r
        long height, width;\r
+       int dRes;\r
        \r
        update = client->update;\r
        wfp = (wfPeerContext*) client->context;\r
@@ -210,45 +169,53 @@ void wf_rfx_encode(freerdp_peer* client)
        if( (wfp->activated == false) )//||             ( (wfi->nextUpdate - wfi->lastUpdate) == 0) )\r
                return;\r
 \r
-       /*\r
-       printf("encode %d\n", wfi->nextUpdate - wfi->lastUpdate);\r
-       printf("\tinvlaid region = (%d, %d), (%d, %d)\n", wfi->invalid_x1, wfi->invalid_y1, wfi->invalid_x2, wfi->invalid_y2);
+       if ( (wfi->invalid_x1 >= wfi->invalid_x2) || (wfi->invalid_y1 >= wfi->invalid_y2) )\r
+                       return;\r
+\r
+       dRes = WaitForSingleObject(wfInfoSingleton->encodeMutex, INFINITE);\r
+       switch(dRes)\r
+       {\r
+       case WAIT_OBJECT_0:\r
+\r
+               printf("encode %d\n", wfi->nextUpdate - wfi->lastUpdate);\r
+               printf("\tinvlaid region = (%d, %d), (%d, %d)\n", wfi->invalid_x1, wfi->invalid_y1, wfi->invalid_x2, wfi->invalid_y2);
        \r
-       */\r
 \r
-       wfi->lastUpdate = wfi->nextUpdate;
-       if ( (wfi->invalid_x1 >= wfi->invalid_x2) ||\r
-               (wfi->invalid_y1 >= wfi->invalid_y2) )\r
-               return;\r
+               wfi->lastUpdate = wfi->nextUpdate;\r
 \r
-       width = wfi->invalid_x2 - wfi->invalid_x1;\r
-       height = wfi->invalid_y2 - wfi->invalid_y1;\r
+               width = wfi->invalid_x2 - wfi->invalid_x1;\r
+               height = wfi->invalid_y2 - wfi->invalid_y1;\r
 \r
-       stream_clear(wfp->s);\r
-       stream_set_pos(wfp->s, 0);\r
-       s = wfp->s;\r
+               stream_clear(wfp->s);\r
+               stream_set_pos(wfp->s, 0);\r
+               s = wfp->s;\r
                \r
-       rect.x = wfi->invalid_x1;\r
-       rect.y = wfi->invalid_y1;\r
-       rect.width = width;\r
-       rect.height = width;\r
+               rect.x = wfi->invalid_x1;\r
+               rect.y = wfi->invalid_y1;\r
+               rect.width = width;\r
+               rect.height = width;\r
 \r
 \r
-       rfx_compose_message(wfp->rfx_context, s, &rect, 1,\r
-                       (uint8*) buf->Userbuffer, width, height, width * 4);\r
+               rfx_compose_message(wfp->rfx_context, s, &rect, 1,\r
+                               (uint8*) buf->Userbuffer, width, height, width * 4);\r
 \r
-       cmd->destLeft = wfi->invalid_x1;\r
-       cmd->destTop = wfi->invalid_y1;\r
-       cmd->destRight = wfi->invalid_x1 + width;\r
-       cmd->destBottom = wfi->invalid_y1 + height;\r
+               cmd->destLeft = wfi->invalid_x1;\r
+               cmd->destTop = wfi->invalid_y1;\r
+               cmd->destRight = wfi->invalid_x1 + width;\r
+               cmd->destBottom = wfi->invalid_y1 + height;\r
 \r
 \r
-       cmd->bpp = 32;\r
-       cmd->codecID = client->settings->rfx_codec_id;\r
-       cmd->width = width;\r
-       cmd->height = height;\r
-       cmd->bitmapDataLength = stream_get_length(s);\r
-       cmd->bitmapData = stream_get_head(s);\r
+               cmd->bpp = 32;\r
+               cmd->codecID = client->settings->rfx_codec_id;\r
+               cmd->width = width;\r
+               cmd->height = height;\r
+               cmd->bitmapDataLength = stream_get_length(s);\r
+               cmd->bitmapData = stream_get_head(s);\r
+               break;\r
+\r
+       default: \r
+        printf("\n\nSomething else happened!!! dRes = %d\n", dRes);\r
+       }\r
 \r
 }\r
 \r
@@ -343,7 +310,7 @@ void wf_peer_synchronize_event(rdpInput* input, uint32 flags)
 \r
 }\r
 \r
-void wf_peer_send_changes()\r
+void wf_peer_send_changes(rdpUpdate* update)\r
 {\r
        int dRes;\r
 \r
@@ -358,6 +325,7 @@ void wf_peer_send_changes()
 \r
                wf_info_updated(wfInfoSingleton);\r
                printf("\tSend...\n");\r
+               update->SurfaceBits(update->context, &update->surface_bits_command);\r
 \r
                break;\r
 \r
index d8fae61..a959003 100644 (file)
@@ -36,7 +36,7 @@ boolean wf_peer_activate(freerdp_peer* client);
 \r
 void wf_peer_synchronize_event(rdpInput* input, uint32 flags);\r
 \r
-void wf_peer_send_changes();\r
+void wf_peer_send_changes(rdpUpdate* update);\r
 \r
 wfInfo * wfInfoSingleton;\r
 \r
index fefa8ef..fec1f40 100644 (file)
@@ -90,6 +90,9 @@ static DWORD WINAPI wf_peer_main_loop(LPVOID lpParam)
                        break;\r
                }\r
 \r
+               if(client->activated)\r
+                       wf_peer_send_changes(client->update);\r
+\r
                /*\r
                if(wfInfoSingleton)\r
                {\r