bool
PVA_FF_AMRDecoderSpecificInfo::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
{
    uint8 temp1 = 0;
    int32  temp2 = 0;
    int32 rendered = 0;

    // Render base descriptor packed size and tag
    if (!renderBaseDescriptorMembers(fp))
    {
        return false;
    }

    rendered += getSize();

    // 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;

    temp1 = (uint8)(((_band_mode << 7) & 0x80) | (_frame_type & 0x0F));
    if (!PVA_FF_AtomUtils::render8(fp, temp1))
    {
        return false;
    }
    rendered += 1;

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

    temp2 = ((_mode_change_period << 1) | (_mode_change_neighbour & 0x01));
    if (!PVA_FF_AtomUtils::render32(fp, temp2))
    {
        return false;
    }
    rendered += 4;

    return true;
}
bool
PVA_FF_DecoderSpecificInfo::renderToFileStream(MP4_AUTHOR_FF_FILE_IO_WRAP *fp)
{
    // Render base descriptor packed size and tag
    if (!renderBaseDescriptorMembers(fp))
    {
        return false;
    }

    // Render decoder specific info payload
    if (!PVA_FF_AtomUtils::renderByteData(fp, _infoSize, _pinfo))
    {
        return false;
    }

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

    // Render the base class members
    int32 numBytes = renderBaseDescriptorMembers(fp);

    if (numBytes == 0)
    {
        return false;
    }
    rendered += numBytes;

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

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

    // Render the base class members
    int32 numBytes = renderBaseDescriptorMembers(fp);

    if (numBytes == 0)
    {
        return false;
    }
    rendered += numBytes;

    // Pack and render ODID, urlFlag, and reserved
    uint16 data = (uint16)((getObjectDescriptorID() & 0x0fffff) << 6); // (10 bits)

    if (getUrlFlag())
    {
        data |= 0x20; // Set urlFlag bit
    }

    data |= _reserved; // (5 bits) reserved 0b11111
    if (!PVA_FF_AtomUtils::render16(fp, data))
    {
        return false;
    }
    rendered += 2;

    if (getUrlFlag())
    {
        // Render _urlLength
        if (!PVA_FF_AtomUtils::render8(fp, getUrlLength()))
        {
            return false;
        }
        rendered += 1;

        // Render url string
        if (getUrlLength() > 0)
        {
            if (!PVA_FF_AtomUtils::renderString(fp, getUrlString()))
            {
                return false;
            }
        }
        rendered += getUrlLength();

    }
    else
    {
        // Render the vector of ESDescriptors - actually render their ESIDs
        if (_pES_ID_Ref_Vec != NULL)
        {
            for (uint32 i = 0; i < _pES_ID_Ref_Vec->size(); i++)
            {
                PVA_FF_ES_ID_Ref* ref = (*_pES_ID_Ref_Vec)[i];
                if (!ref->renderToFileStream(fp))
                {
                    return false;
                }
                rendered += ref->getSizeOfDescriptorObject();
            }
        }
    }

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

    // Render attributes of the PVA_FF_BaseDescriptor class
    int32 numBytes = renderBaseDescriptorMembers(fp);

    if (numBytes == 0)
    {
        return false;
    }
    rendered += numBytes;

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

    // Pack and render stream type, upstream, and reserved
    uint8 data = _reserved; // Initial data byte including reserved bit set
    data |= ((_streamType & 0x3f) << 2);  // 0b00XXXXXX << 2
    if (_upStream)
    {
        data |= 0x02;
    }
    if (!PVA_FF_AtomUtils::render8(fp, data))
    {
        return false;
    }
    rendered += 1;

    if (!PVA_FF_AtomUtils::render24(fp, _bufferSizeDB))
    {
        return false;
    }
    rendered += 3;

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

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

    if (_pdecSpecificInfoVec != NULL)
    {
        for (uint32 i = 0; i < _pdecSpecificInfoVec->size(); i++)
        {
            if (!(*_pdecSpecificInfoVec)[i]->renderToFileStream(fp))
            {
                return false;
            }
            rendered += (*_pdecSpecificInfoVec)[i]->getSizeOfDescriptorObject();
        }
    }

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

    // Render attributes of the PVA_FF_BaseDescriptor class
    int32 numBytes = renderBaseDescriptorMembers(fp);

    if (numBytes == 0)
    {
        return false;
    }
    rendered += numBytes; // (1 + variable for _sizeOfClass)

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

    // Pack and render SDF, UF, reserved, and stream Priority

    uint8 data = 0x00; // OCRstreamFlag set to 0

    if (_streamDependenceFlag)
    {
        // If this stream depends on another ES
        data |= 0x80; //data = 1000 0000
    }
    if (_urlFlag)
    {
        // If URL present in this descriptor
        data |= 0x40; //data = 1100 0000
    }

    // OCRStreamFlag defaults to ZERO - Bit 3 from MSB

    data |= (_streamPriority & 0x1f); // LS 5 bits for stream priority
    if (!PVA_FF_AtomUtils::render8(fp, data))
    {
        return false;
    }
    rendered += 1;

    if (_streamDependenceFlag)
    {
        // If this stream depends on another ES
        if (!PVA_FF_AtomUtils::render16(fp, _dependsOnESID))
        {
            return false;
        }
        rendered += 2;
    }
    if (_urlFlag)
    {
        //If URL present in this descriptor
        if (!PVA_FF_AtomUtils::render8(fp, _urlLength))
        {
            return false;
        }
        if (!PVA_FF_AtomUtils::renderString(fp, _urlString))
        {
            return false;
        }
        rendered += _urlLength + 1;
    }

    // Render PVA_FF_DecoderConfigDescriptor
    if (!_pdcd->renderToFileStream(fp))
    {
        return false;
    }
    rendered += _pdcd->getSizeOfDescriptorObject();

    // Render PVA_FF_SLConfigDescriptor
    if (!_pslcd->renderToFileStream(fp))
    {
        return false;
    }
    rendered += _pslcd->getSizeOfDescriptorObject();

    return true;
}