Added avi metadata encoding code for libgwavi driver (old Qt GUI avi backend).
This commit is contained in:
parent
6f0f4177f2
commit
4352fd8da0
|
@ -133,6 +133,7 @@ gwavi_t::open(const char *filename, unsigned int width, unsigned int height,
|
||||||
(void)fprintf(stderr, "WARNING: given fourcc does not seem to "
|
(void)fprintf(stderr, "WARNING: given fourcc does not seem to "
|
||||||
"be valid: %s\n", fourcc);
|
"be valid: %s\n", fourcc);
|
||||||
}
|
}
|
||||||
|
avi_info.add_pair("ISFT", "fceux libgwavi");
|
||||||
|
|
||||||
if (fps < 1)
|
if (fps < 1)
|
||||||
{
|
{
|
||||||
|
@ -275,6 +276,56 @@ gwavi_t::open(const char *filename, unsigned int width, unsigned int height,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( avi_info.kvmap.size() > 0 )
|
||||||
|
{
|
||||||
|
long long t, infoMarker;
|
||||||
|
if (write_chars_bin(out, "LIST", 4) == -1)
|
||||||
|
goto write_chars_bin_failed;
|
||||||
|
if ((infoMarker = ftell(out)) == -1) {
|
||||||
|
perror("gwavi_info (ftell)");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (write_int(out, 0) == -1) {
|
||||||
|
(void)fprintf(stderr, "gwavi_info: write_int() failed\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (write_chars_bin(out, "INFO", 4) == -1)
|
||||||
|
goto write_chars_bin_failed;
|
||||||
|
|
||||||
|
for ( auto it = avi_info.kvmap.begin(); it != avi_info.kvmap.end(); it++)
|
||||||
|
{
|
||||||
|
if (write_chars_bin(out, it->first.c_str(), 4) == -1)
|
||||||
|
goto write_chars_bin_failed;
|
||||||
|
|
||||||
|
if (write_int(out, it->second.size()+1) == -1) {
|
||||||
|
(void)fprintf(stderr, "gwavi_info: write_int() failed\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (write_chars_bin(out, it->second.c_str(), it->second.size()) == -1)
|
||||||
|
goto write_chars_bin_failed;
|
||||||
|
|
||||||
|
write_byte(out, 0);
|
||||||
|
|
||||||
|
if ( (it->second.size()+1) % WORD_SIZE )
|
||||||
|
{
|
||||||
|
write_byte(out, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((t = ftell(out)) == -1)
|
||||||
|
goto write_chars_bin_failed;
|
||||||
|
|
||||||
|
if (fseek(out, infoMarker, SEEK_SET) == -1)
|
||||||
|
goto write_chars_bin_failed;
|
||||||
|
|
||||||
|
if (write_int(out, (unsigned int)(t - infoMarker - 4)) == -1)
|
||||||
|
goto write_chars_bin_failed;
|
||||||
|
|
||||||
|
if (fseek(out, t, SEEK_SET) == -1)
|
||||||
|
goto write_chars_bin_failed;
|
||||||
|
}
|
||||||
|
|
||||||
if (write_chars_bin(out, "LIST", 4) == -1)
|
if (write_chars_bin(out, "LIST", 4) == -1)
|
||||||
goto write_chars_bin_failed;
|
goto write_chars_bin_failed;
|
||||||
if ((marker = ftell(out)) == -1) {
|
if ((marker = ftell(out)) == -1) {
|
||||||
|
@ -865,7 +916,7 @@ unsigned int gwavi_t::readList(int lvl)
|
||||||
unsigned int gwavi_t::readChunk(const char *id, int lvl)
|
unsigned int gwavi_t::readChunk(const char *id, int lvl)
|
||||||
{
|
{
|
||||||
unsigned int r, ret, size, chunkSize, bytesRead=0;
|
unsigned int r, ret, size, chunkSize, bytesRead=0;
|
||||||
unsigned short dataWord;
|
//unsigned short dataWord;
|
||||||
char indent[256];
|
char indent[256];
|
||||||
long long int fpos;
|
long long int fpos;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue