public void LoadFromBytes(byte[] dados) { unsafe { fixed(byte *pSrc = dados) { FormatoPlaylist *listaArquivos = (FormatoPlaylist *)pSrc; Byte[] temporario = new byte[listaArquivos->qtdArquivos]; listaArquivos->Tamanho = (UInt32)dados.Length; this.versao = listaArquivos->versao; this.qtdArquivos = listaArquivos->qtdArquivos; // Limpa a lista this.listaVideos.Clear(); int indice = sizeof(FormatoPlaylist) - sizeof(UInt32); for (int i = 0; i < this.qtdArquivos; i++) { int indiceInicial = indice; // Pegar o tamanho do Arquivo uint tamanhoArquivo = BitConverter.ToUInt32(dados, indice); byte[] dadosVideo = new byte[tamanhoArquivo]; // Atualiza o indice com o tamanho do arquivo indice += sizeof(uint); // Pular a versão indice++; Array.Copy(dados, indiceInicial, dadosVideo, 0, tamanhoArquivo); // Pegar o formato do Arquivo Ex.: V02 if (Encoding.ASCII.GetString(dados, indice, 3).ToUpper().Equals("V01")) { // Instancia o video a partir do formato VideoV01 video = new VideoV01(); // Carrega através do ARRAY video.LoadFromBytes(dadosVideo); // Adiciona o video listaVideos.Add(video); } else if (Encoding.ASCII.GetString(dados, indice, 3).ToUpper().Equals("V02")) { // Instancia o video a partir do formato VideoV02 video = new VideoV02(); // Carrega através do ARRAY video.LoadFromBytes(dadosVideo); // Adiciona o video listaVideos.Add(video); } else if (Encoding.ASCII.GetString(dados, indice, 3).ToUpper().Equals("V04")) { // Instancia o video a partir do formato VideoV04 video = new VideoV04(); // Carrega através do ARRAY video.LoadFromBytes(dadosVideo); // Adiciona o video listaVideos.Add(video); } indice = indice + dadosVideo.Length; indice = indice - sizeof(uint); indice = indice - 1; } } } }
public void LoadFromBytes(byte[] dados) { if (null == this.listaVideos) { this.listaVideos = new List <IVideo>(); } unsafe { fixed(byte *pSrc = dados) { FormatoVideo04 *listaArquivos = (FormatoVideo04 *)pSrc; Byte[] temporario = new byte[listaArquivos->qntFrames]; listaArquivos->Tamanho = (UInt32)dados.Length; this.versao = listaArquivos->versao; uint qtdFrames = listaArquivos->qntFrames; // Limpa a lista this.listaVideos.Clear(); int indice = sizeof(FormatoVideo04) - sizeof(UInt32); for (int i = 0; i < qtdFrames; i++) { FormatoFrame temporaria = new FormatoFrame(); temporaria.x = BitConverter.ToUInt32(dados, indice); indice += sizeof(uint); temporaria.y = BitConverter.ToUInt32(dados, indice); indice += sizeof(uint); temporaria.height = BitConverter.ToUInt32(dados, indice); indice += sizeof(uint); temporaria.width = BitConverter.ToUInt32(dados, indice); indice += sizeof(uint); listaFrames.Add(temporaria); // Pegar o tamanho do Arquivo uint tamanhoArquivo = BitConverter.ToUInt32(dados, indice); byte[] dadosVideo = new byte[tamanhoArquivo]; Array.Copy(dados, indice, dadosVideo, 0, tamanhoArquivo); // índice do tamanho indice += sizeof(uint); // índice da versão indice++; // Pegar o formato do Arquivo Ex.: V02 if (Encoding.ASCII.GetString(dados, indice, 3).ToUpper().Equals("V01")) { // Instancia o video a partir do formato VideoV01 video = new VideoV01(); // Carrega através do ARRAY video.LoadFromBytes(dadosVideo); // Adiciona o video listaVideos.Add(video); } else if (Encoding.ASCII.GetString(dados, indice, 3).ToUpper().Equals("V02")) { // Instancia o video a partir do formato VideoV02 video = new VideoV02(); // Carrega através do ARRAY video.LoadFromBytes(dadosVideo); // Adiciona o video listaVideos.Add(video); } else if (Encoding.ASCII.GetString(dados, indice, 3).ToUpper().Equals("PLS")) { // Instancia o video a partir do formato Arquivo_PLS video = new Arquivo_PLS(); // Carrega através do ARRAY video.LoadFromBytes(dadosVideo); // Adiciona o video listaVideos.Add(video); } indice = indice + dadosVideo.Length - (sizeof(uint) + 1 /*tamanho da versão*/); } } } }