1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #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;
- }
|