// write atom in target file
bool
PVA_FF_MovieFragmentRandomAccessAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP* fp)
{
    uint32 rendered = 0;

    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    // render track fragment random access atoms
    if (_pTfraList->size() != 0)
    {
        for (uint32 ii = 0; ii < _pTfraList->size(); ii++)
        {
            if (!((*_pTfraList)[ii])->renderToFileStream(fp))
            {
                return false;
            }
            rendered += ((*_pTfraList)[ii])->getSize();
        }
    }

    // Render the movie fragment random access offset atom
    _pMfroAtom->setSize(_size); // before rendering set the size field in MFRO atom
    if (!_pMfroAtom->renderToFileStream(fp))
    {
        return false;
    }
    rendered += _pMfroAtom->getSize();

    return true;
}
// Rendering the PVA_FF_Atom in proper format (bitlengths, etc.) to an ostream
bool
PVA_FF_MediaInformationAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
{
    int32 rendered = 0; // Keep track of number of bytes rendered

    // Render PVA_FF_Atom type and size
    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    // Render the data of the members once they get implemented
    if (!_pmediaInformationHeader->renderToFileStream(fp))
    {
        return false;
    }
    rendered += _pmediaInformationHeader->getSize();

    if (!_pdataInformationAtom->renderToFileStream(fp))
    {
        return false;
    }
    rendered += _pdataInformationAtom->getSize();

    if (!_psampleTableAtom->renderToFileStream(fp))
    {
        return false;
    }
    rendered += _psampleTableAtom->getSize();

    return true;
}
Esempio n. 3
0
bool
PVA_FF_H263DecBitrateAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
{
    int32 rendered = 0;

    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    // Render decoder bitrate info payload
    if (!PVA_FF_AtomUtils::render32(fp, _avg_bitrate))
    {
        return false;
    }
    rendered += 4;

    if (!PVA_FF_AtomUtils::render32(fp, _max_bitrate))
    {
        return false;
    }
    rendered += 4;

    return true;
}
// Rendering the PVA_FF_Atom in proper format (bitlengths, etc.) to an ostream
bool
PVA_FF_MediaAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
{
    int32 rendered = 0; // Keep track of number of bytes rendered

    // Render PVA_FF_Atom type and size
    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    // Render all member atoms
    if (!_pmediaHeader->renderToFileStream(fp))
    {
        return false;
    }
    rendered += _pmediaHeader->getSize();

    if (!_phandler->renderToFileStream(fp))
    {
        return false;
    }
    rendered += _phandler->getSize();

    if (!_pmediaInformation->renderToFileStream(fp))
    {
        return false;
    }
    rendered += _pmediaInformation->getSize();

    return true;
}
Esempio n. 5
0
// Rendering the PVA_FF_Atom in proper format (bitlengths, etc.) to an ostream
bool
PVA_FF_ChunkOffsetAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
{
    int32 rendered = 0;

    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    if (!PVA_FF_AtomUtils::render32(fp, getEntryCount()))
    {
        return false;
    }
    rendered += 4;

    if (_pchunkOffsets->size() < getEntryCount())
    {
        return false;
    }
    for (uint32 i = 0; i < getEntryCount(); i++)
    {
        if (!PVA_FF_AtomUtils::render32(fp, (*_pchunkOffsets)[i]))
        {
            return false;
        }
    }
    rendered += 4 * getEntryCount();

    return true;
}
// Write the atom into target file
bool
PVA_FF_MovieExtendsAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP* fp)
{
    uint32 rendered = 0;

    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    // Render the movie extend header atom
    if (!_pMehdAtom->renderToFileStream(fp))
    {
        return false;
    }
    rendered += getMehdAtom()->getSize();

    // render track extend atoms
    if (_pTrexAtomVec->size() != 0)
    {
        for (uint32 ii = 0; ii < _pTrexAtomVec->size(); ii++)
        {
            if (!((*_pTrexAtomVec)[ii])->renderToFileStream(fp))
            {
                return false;
            }
            rendered += ((*_pTrexAtomVec)[ii])->getSize();
        }
    }

    return true;
}
bool
PVA_FF_FileTypeAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
{
    int32 rendered = 0; // Keep track of number of bytes rendered

    // Render PVA_FF_Atom type and size
    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    if (!PVA_FF_AtomUtils::render32(fp, _Brand))
    {
        return false;
    }
    rendered += 4;

    if (!PVA_FF_AtomUtils::render32(fp, _Version))
    {
        return false;
    }
    rendered += 4;

    for (uint32 i = 0; i < _pCompatibleBrandVec->size(); i++)
    {
        if (!PVA_FF_AtomUtils::render32(fp, (*_pCompatibleBrandVec)[i]))
        {
            return false;
        }
    }

    return true;
}
bool PVA_FF_AssetInfoGenreAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
{
    int32 rendered = 0; // Keep track of number of bytes rendered

    // Render PVA_FF_Atom type and size
    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    if (!PVA_FF_AtomUtils::render16(fp, _langCode))
    {
        return false;
    }
    rendered += 2;

    if (!PVA_FF_AtomUtils::render16(fp, _byteOrderMask))
    {
        return false;
    }
    rendered += 2;

    if (!PVA_FF_AtomUtils::renderNullTerminatedUnicodeString(fp, _genre))
    {
        return false;
    }
    rendered += _genre.get_size() + 1; // 1 for the NULL entry
    //recomputeSize();
    return true;
}
// write atom to the target file
bool
PVA_FF_MovieExtendsHeaderAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP* fp)
{
    uint32 rendered = 0;

    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    // store file offset to modify duration later
    _fileOffset = PVA_FF_AtomUtils::getCurrentFilePosition(fp);

    if (!PVA_FF_AtomUtils::render32(fp, _fragmentDuration))
    {
        return false;
    }

    rendered += 4;

    _oRendered = true;

    return true;
}
bool PVA_FF_AssetInfoKeyWordsAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)

{
    recomputeSize();
    int32 rendered = 0; // Keep track of number of bytes rendered

    // Render PVA_FF_Atom type and size
    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    if (!PVA_FF_AtomUtils::render16(fp, _langCode))
    {
        return false;
    }
    rendered += 2;


    if (!PVA_FF_AtomUtils::render8(fp, _keyWordCnt))
    {
        return false;
    }
    rendered += 1;

    // calculate size of each object in the structure
    for (int i = 0; i < _keyWordCnt; i++)
    {
        (*_pKeyWordVect)[i]->renderToFileStream(fp);
        rendered += (*_pKeyWordVect)[i]->getSizeofStruct();

    }
    return true;
}
// write atom to target file
bool
PVA_FF_TrackFragmentAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP* fp)
{
    uint32 rendered = 0;

    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    // Render the movie fragment header atom
    if (!_pTfhdAtom->renderToFileStream(fp))
    {
        return false;
    }
    rendered += _pTfhdAtom->getSize();


    // render track extend atoms
    if (_pTrunList->size() != 0)
    {
        for (uint32 ii = 0; ii < _pTrunList->size(); ii++)
        {
            if (!((*_pTrunList)[ii])->renderToFileStream(fp))
            {
                return false;
            }
            rendered += ((*_pTrunList)[ii])->getSize();
        }
    }

    return true;
}
Esempio n. 12
0
bool
PVA_FF_EVRCSpecificAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
{
    int32 rendered = 0;

    renderAtomBaseMembers(fp);
    rendered += getDefaultSize();

    // Render decoder specific info payload
    if (!PVA_FF_AtomUtils::render32(fp, _VendorCode))
    {
        return false;
    }
    rendered += 4;

    if (!PVA_FF_AtomUtils::render8(fp, _encoder_version))
    {
        return false;
    }
    rendered += 1;

    if (!PVA_FF_AtomUtils::render8(fp, _frames_per_sample))
    {
        return false;
    }
    rendered += 1;

    return true;
}
bool
PVA_FF_EditListAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
{
    int32 rendered = 0;
    uint32 i = 0; // Keep track of number of bytes rendered

    recomputeSize();

    // Render PVA_FF_Atom type and size
    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    if (!PVA_FF_AtomUtils::render32(fp, _entryCount))
    {
        return false;
    }
    rendered += 4;

    for (i = 0; i < _entryCount; i++)
    {
        if (!PVA_FF_AtomUtils::render32(fp, (*_psegmentDurations)[i]))
        {
            return false;
        }
        rendered += 4;

        if (!PVA_FF_AtomUtils::render32(fp, (*_pmediaTimes)[i]))
        {
            return false;
        }
        rendered += 4;

        if (!PVA_FF_AtomUtils::render16(fp, (*_pmediaRates)[i]))
        {
            return false;
        }
        rendered += 2;

        if (!PVA_FF_AtomUtils::render16(fp, 0))
        {
            return false;
        }
        rendered += 2;
    }

    return true;
}
Esempio n. 14
0
bool
PVA_FF_H263SpecficAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
{
    int32 rendered = 0;

    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    // Render decoder specific info payload
    if (!PVA_FF_AtomUtils::render32(fp, _VendorCode))
    {
        return false;
    }
    rendered += 4;

    if (!PVA_FF_AtomUtils::render8(fp, _encoder_version))
    {
        return false;
    }
    rendered += 1;

    if (!PVA_FF_AtomUtils::render8(fp, _codec_level))
    {
        return false;
    }
    rendered += 1;

    if (!PVA_FF_AtomUtils::render8(fp, _codec_profile))
    {
        return false;
    }
    rendered += 1;

    if (!_ph263_decbitrateatom->renderToFileStream(fp))
    {
        return false;
    }
    rendered += _ph263_decbitrateatom->getSize();


    return true;
}
Esempio n. 15
0
// write atom in target file
bool
PVA_FF_TrackExtendsAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP* fp)
{

    uint32 rendered = 0;

    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    if (!PVA_FF_AtomUtils::render32(fp, _trackId))
    {
        return false;
    }
    rendered += 4;

    if (!PVA_FF_AtomUtils::render32(fp, _defaultSampleDescriptionIndex))
    {
        return false;
    }
    rendered += 4;

    if (!PVA_FF_AtomUtils::render32(fp, _defaultSampleDuration))
    {
        return false;
    }
    rendered += 4;

    if (!PVA_FF_AtomUtils::render32(fp, _defaultSampleSize))
    {
        return false;
    }
    rendered += 4;

    if (!PVA_FF_AtomUtils::render32(fp, _defaultSampleFlags))
    {
        return false;
    }
    rendered += 4;

    return true;
}
bool PVA_FF_AssetInfoClassificationAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)

{
    int32 rendered = 0; // Keep track of number of bytes rendered

    // Render PVA_FF_Atom type and size
    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    if (!PVA_FF_AtomUtils::render32(fp, _classificationEntity))
    {
        return false;
    }
    rendered += 4;

    if (!PVA_FF_AtomUtils::render16(fp, _classificationTable))
    {
        return false;
    }
    rendered += 2;

    if (!PVA_FF_AtomUtils::render16(fp, _langCode))
    {
        return false;
    }
    rendered += 2;

    if (!PVA_FF_AtomUtils::render16(fp, _byteOrderMask))
    {
        return false;
    }
    rendered += 2;

    if (!PVA_FF_AtomUtils::renderNullTerminatedUnicodeString(fp, _classificationInfo))
    {
        return false;
    }
    rendered += _classificationInfo.get_size() + 1; // 1 for the NULL entry
    return true;
}
// write atom to target file
bool
PVA_FF_MfroAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP* fp)
{
    uint32 rendered = 0;

    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    if (!PVA_FF_AtomUtils::render32(fp, _atomSize))
    {
        return false;
    }
    rendered += 4;

    return true;
}
// write atom to target file
bool
PVA_FF_MovieFragmentHeaderAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP* fp)
{
    uint32 rendered = 0;

    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    if (!PVA_FF_AtomUtils::render32(fp, _sequenceNumber))
    {
        return false;
    }
    rendered += 4;

    return true;
}
Esempio n. 19
0
// Rendering the PVA_FF_Atom in proper format (bitlengths, etc.) to an ostream
bool
PVA_FF_ESDAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
{
    int32 rendered = 0;

    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    if (!_pdescriptor->renderToFileStream(fp))
    {
        return false;
    }
    rendered += _pdescriptor->getSizeOfDescriptorObject();

    return true;
}
// Rendering the PVA_FF_Atom in proper format (bitlengths, etc.) to an ostream
bool
PVA_FF_HandlerAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
{
    int32 rendered = 0; // Keep track of number of bytes rendered

    // Render PVA_FF_Atom type and size
    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    if (!PVA_FF_AtomUtils::render32(fp, 0))
    {
        return false;
    }
    rendered += 4;

    if (!PVA_FF_AtomUtils::render32(fp, _handlerType))
    {
        return false;
    }
    rendered += 4;

    uint8 reserved = 0;
    for (int32 i = 0; i < 12; i++)
    {
        if (!PVA_FF_AtomUtils::render8(fp, reserved))
        {
            return false;
        }
    }
    rendered += 12;

    if (!PVA_FF_AtomUtils::renderNullTerminatedString(fp, _name))
    {
        return false;
    }
    rendered += _name.get_size() + 1;

    return true;
}
// Rendering the PVA_FF_Atom in proper format (bitlengths, etc.) to an ostream
bool
PVA_FF_SoundMediaHeaderAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
{
    int32 rendered = 0;

    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    // Render 32 bits of 0
    if (!PVA_FF_AtomUtils::render32(fp, _reserved))
    {
        return false;
    }
    rendered += 4;

    return true;
}
bool
PVA_FF_ProtectionSchemeInfoAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
{
    int32 rendered = 0; // Keep track of number of bytes rendered

    // Render PVA_FF_Atom type and size
    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    if (! _originalFormatAtom.renderToFileStream(fp))
    {
        return false;
    }

    rendered += _originalFormatAtom.getSize();

    return true;
}
bool
PVA_FF_AssetInfoRecordingYearAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
{
    //recomputeSize();
    int32 rendered = 0; // Keep track of number of bytes rendered

    // Render PVA_FF_Atom type and size
    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    if (!PVA_FF_AtomUtils::render16(fp, _recordingYear))
    {
        return false;
    }
    rendered += 2;
    return true;

}
Esempio n. 24
0
// Rendering the PVA_FF_Atom in proper format (bitlengths, etc.) to an ostream
bool
PVA_FF_DataInformationAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
{
    int32 rendered = 0;

    // Render base PVA_FF_Atom members
    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    // Render the dataReferenceAtom
    if (!_pdataReferenceAtom->renderToFileStream(fp))
    {
        return false;
    }
    rendered += getDataReferenceAtom().getSize();

    return true;
}
bool
PVA_FF_OriginalFormatAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
{
    int32 rendered = 0; // Keep track of number of bytes rendered

    // Render PVA_FF_Atom type and size
    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    // Render original format
    if (!PVA_FF_AtomUtils::render32(fp, _originalformat))
    {
        return false;
    }

    rendered += 4;

    return true;
}
// Rendering the PVA_FF_Atom in proper format (bitlengths, etc.) to an ostream
bool
PVA_FF_TrackReferenceTypeAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
{
    int32 rendered = 0;

    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    for (uint32 i = 0; i < _trackIDs->size(); i++)
    {
        if (!PVA_FF_AtomUtils::render32(fp, (*_trackIDs)[i]))
        {
            return false;
        }
    }
    rendered += (4 * _trackIDs->size());

    return true;
}
Esempio n. 27
0
bool
PVA_FF_EditAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
{
    int32 rendered = 0; // Keep track of number of bytes rendered

    recomputeSize();

    // Render PVA_FF_Atom type and size
    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    // Render the data of the members once they get implemented
    if (!_peditList->renderToFileStream(fp))
    {
        return false;
    }

    return true;
}
// Create the atom temp file and the corresponding ofstream
void
PVA_FF_MediaDataAtom::prepareTempFile(uint32 aCacheSize)
{
    if (_pofstream._filePtr == NULL && !_fileWriteError)
    {
        // 05/31/01 Generate temporary files into output path (the actual mp4 location)
        // _tempFilename already contains the output path ("drive:\\...\\...\\")
        //
        _tempFilename += _STRLIT("temp");
        // Assign the rest of the temp filename - index plus suffix
        _tempFilename += (uint16)(_tempFileIndex++);

        // 03/21/01 Multiple instances support
        _tempFilename += _STRLIT("_");
        _tempFilename += _tempFilePostfix;
        //

        _tempFilename += _STRLIT(".mdat");

        _pofstream._osclFileServerSession = OSCL_STATIC_CAST(Oscl_FileServer*, _osclFileServerSession);

        PVA_FF_AtomUtils::openFile(&_pofstream, _tempFilename, Oscl_File::MODE_READWRITE | Oscl_File::MODE_BINARY, aCacheSize);

        if (_pofstream._filePtr == NULL)
        {
            _fileWriteError = true;
        }
        else
        {
            _oIsFileOpen = true;
        }

        // Render the atoms base members to the media data atom file
        renderAtomBaseMembers(&_pofstream);

        _fileOffsetForChunkStart = getDefaultSize();
        _fileSize = getDefaultSize();
    }
// Rendering the PVA_FF_Atom in proper format (bitlengths, etc.) to an ostream
bool
PVA_FF_H263SampleEntry::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
{
    int32 rendered = 0;
    int32 i;

    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    // From PVA_FF_SampleEntry base class
    for (i = 0; i < 6; i++)
    {
        if (!PVA_FF_AtomUtils::render8(fp, _reserved[i]))
        {
            return false;
        }
        rendered += 1;
    }

    if (!PVA_FF_AtomUtils::render16(fp, _dataReferenceIndex))
    {
        return false;
    }

    for (i = 0; i < 4; i++)
    {
        if (!PVA_FF_AtomUtils::render32(fp, _reserved1[i]))
        {
            return false;
        }
        rendered += 4;
    }

    if (!PVA_FF_AtomUtils::render32(fp, _reserved2))
    {
        return false;
    }
    if (!PVA_FF_AtomUtils::render32(fp, _reserved3))
    {
        return false;
    }
    if (!PVA_FF_AtomUtils::render32(fp, _reserved4))
    {
        return false;
    }
    if (!PVA_FF_AtomUtils::render32(fp, _reserved5))
    {
        return false;
    }
    rendered += 16;

    if (!PVA_FF_AtomUtils::render16(fp, _reserved6))
    {
        return false;
    }
    rendered += 2;

    for (i = 0; i < 32; i++)
    {
        if (!PVA_FF_AtomUtils::render8(fp, _reserved7[i]))
        {
            return false;
        }
    }
    rendered += 32;

    if (!PVA_FF_AtomUtils::render16(fp, _reserved8))
    {
        return false;
    }
    if (!PVA_FF_AtomUtils::render16(fp, _reserved9))
    {
        return false;
    }
    rendered += 4;

    if (!pH263SpecificAtom->renderToFileStream(fp))
    {
        return false;
    }
    rendered += pH263SpecificAtom->getSize();

    return true;
}
bool PVA_FF_AssetInfoLocationInfoAtom::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
{
    recomputeSize();

    int32 rendered = 0; // Keep track of number of bytes rendered

    // Render PVA_FF_Atom type and size
    if (!renderAtomBaseMembers(fp))
    {
        return false;
    }
    rendered += getDefaultSize();

    if (!PVA_FF_AtomUtils::render16(fp, _langCode))
    {
        return false;
    }
    rendered += 2;

    if (!PVA_FF_AtomUtils::render16(fp, _byteOrderMask))
    {
        return false;
    }
    rendered += 2;

    if (!PVA_FF_AtomUtils::renderNullTerminatedUnicodeString(fp, _locationInfoName))
    {
        return false;
    }
    rendered += _locationInfoName.get_size() + 1; // 1 for the NULL entry


    if (!PVA_FF_AtomUtils::render8(fp, _locationInfoRole))
    {
        return false;
    }
    rendered += 1;

    if (!PVA_FF_AtomUtils::render32(fp, _locationInfoLongitude))
    {
        return false;
    }
    rendered += 4;


    if (!PVA_FF_AtomUtils::render32(fp, _locationInfoLatitude))
    {
        return false;
    }
    rendered += 4;


    if (!PVA_FF_AtomUtils::render32(fp, _locationInfoAltitude))
    {
        return false;
    }
    rendered += 4;

    if (!PVA_FF_AtomUtils::render16(fp, _byteOrderMask))
    {
        return false;
    }
    rendered += 2;

    if (!PVA_FF_AtomUtils::renderNullTerminatedUnicodeString(fp, _locationInfoAstrBody))
    {
        return false;
    }
    rendered += _locationInfoAstrBody.get_size() + 1; // 1 for the NULL entry

    if (!PVA_FF_AtomUtils::render16(fp, _byteOrderMask))
    {
        return false;
    }
    rendered += 2;

    if (!PVA_FF_AtomUtils::renderNullTerminatedUnicodeString(fp, _locationInfoAddNotes))
    {
        return false;
    }
    rendered += _locationInfoAddNotes.get_size() + 1; // 1 for the NULL entry
    return true;
}