/// <summary> /// Regenerates a Texture2D from the complete image structure stored /// on the data structure. /// </summary> /// <param name="id">Identifier of the image received to regenerate.</param> private void RegenerateTextureFromReceivedData(uint id) { Debug.Log("Regenerating texture from received data."); TextureStruc textS = msgData[id]; msgData.RemoveStream(id); Texture2D texture = new Texture2D(textS.width, textS.height); texture.SetPixels32(textS.data); texture.Apply(true); lastCapturedFrame = texture; }
/// <summary> /// Saves on the data structure the data contained in a chunk. /// </summary> /// <param name="row">Image's chunk message.</param> private void SaveChunk(TextureChunkMessage row) { TextureStruc textureStruc = msgData[row.id]; for (int i = 0; i < row.data.Length && i < row.size && textureStruc.pixelsReceived < textureStruc.data.Length; i++) { textureStruc.data[i + row.order * textureStruc.chunkSize] = row.data[i]; textureStruc.pixelsReceived += 1; } msgData[row.id] = textureStruc; Debug.Log(textureStruc.pixelsReceived + "/" + textureStruc.data.Length + " pixels currently recived for ID " + row.id + "."); }
/// <summary> /// Processes the header messages received on the client. /// </summary> /// <param name="header">Image's header message.</param> private void OnTextureHeaderReceived(TextureHeaderMessage header) { TextureStruc textS = new TextureStruc(header.width, header.height, header.chunkSize); msgData.RecoverEarlyChunks(header, textS, SaveChunk); if (msgData.CheckTimestamp(header)) { StartCoroutine( msgData.WaitTillReceiveAllTheStream( header, (uint id) => msgData[id].pixelsReceived < msgData[id].data.Length, streamTimeout)); } }