mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-12-11 18:21:01 -05:00
68 lines
No EOL
1.1 KiB
C++
68 lines
No EOL
1.1 KiB
C++
#include "info.h"
|
|
#include "read.h"
|
|
|
|
nsavi::Info::Info()
|
|
{
|
|
|
|
}
|
|
|
|
nsavi::Info::~Info()
|
|
{
|
|
for (auto itr = this->begin(); itr != this->end(); itr++)
|
|
{
|
|
free((void*)itr->second);
|
|
}
|
|
}
|
|
|
|
int nsavi::Info::Read(nsavi::avi_reader* reader, uint32_t data_len)
|
|
{
|
|
while (data_len)
|
|
{
|
|
riff_chunk chunk;
|
|
uint32_t bytes_read = 0;
|
|
nsavi::read_riff_chunk(reader, &chunk, &bytes_read);
|
|
data_len -= bytes_read;
|
|
size_t malloc_size = chunk.size + 1;
|
|
if (malloc_size == 0)
|
|
return READ_INVALID_DATA;
|
|
|
|
char* str = (char*)calloc(malloc_size, sizeof(char));
|
|
if (!str)
|
|
return READ_OUT_OF_MEMORY;
|
|
|
|
reader->Read(str, chunk.size, &bytes_read);
|
|
str[chunk.size] = 0;
|
|
data_len -= bytes_read;
|
|
|
|
Set(chunk.id, str);
|
|
|
|
if (chunk.size & 1)
|
|
{
|
|
reader->Skip(1);
|
|
data_len--;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void nsavi::Info::Set(uint32_t chunk_id, const char* data)
|
|
{
|
|
auto it = this->find(chunk_id);
|
|
if (this->end() == it)
|
|
{
|
|
this->insert({ chunk_id, data });
|
|
}
|
|
else
|
|
{
|
|
it->second = data;
|
|
}
|
|
}
|
|
const char* nsavi::Info::GetMetadata(uint32_t id)
|
|
{
|
|
InfoMap::iterator itr = InfoMap::find(id);
|
|
if (itr != InfoMap::end())
|
|
{
|
|
return itr->second;
|
|
}
|
|
return 0;
|
|
} |