1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- /** \file atom_ohdr.cpp
- \author Danijel Kopcinovic ([email protected])
- */
- #include "mp4common.h"
- /*! \brief Patch class for read/write operations when string is 0-length.
- We want to use string property, but mpeg4ip doesn't support ohdr way of
- encoding of string (in ohdr atom we first have 3 lengths of 3 strings and
- then their string values, and it cannot be simulated with any of the
- current mpeg4ip string property parameters), so we have to write our own
- Read() and Write() routines.
- */
- class OhdrMP4StringProperty: public MP4StringProperty {
- public:
- /*! \brief Constructor.
-
- \param name name of the property.
- \param useCountedFormat counted format flag.
- \param useUnicode unicode flag.
- */
- OhdrMP4StringProperty(char* name, bool useCountedFormat = false,
- bool useUnicode = false): MP4StringProperty(name, useCountedFormat,
- useUnicode) {
- }
-
- /*! \brief Read property from file.
-
- \param pFile input, file handle.
- \param index input, index to read.
- */
- void Read(MP4File* pFile, u_int32_t index = 0) {
- MP4Free(m_values[index]);
- m_values[index] = (char*)MP4Calloc(m_fixedLength + 1);
- (void)pFile->ReadBytes((u_int8_t*)m_values[index], m_fixedLength);
- }
-
- /*! \brief Write property to file.
-
- \param pFile input, file handle.
- \param index input, index to write.
- */
- void Write(MP4File* pFile, u_int32_t index = 0) {
- pFile->WriteBytes((u_int8_t*)m_values[index], m_fixedLength);
- }
- };
- /*! \brief OMA DRM headers atom.
- Contained in OMA DRM key management atom. It must contain content identifier.
- */
- /*! \brief Constructor.
- */
- MP4OhdrAtom::MP4OhdrAtom(): MP4Atom("ohdr") {
- AddVersionAndFlags();
- AddProperty(new MP4Integer8Property("EncryptionMethod"));
- AddProperty(new MP4Integer8Property("EncryptionPadding"));
- AddProperty(new MP4Integer64Property("PlaintextLength"));
- AddProperty(new MP4Integer16Property("ContentIDLength"));
- AddProperty(new MP4Integer16Property("RightsIssuerURLLength"));
- AddProperty(new MP4Integer16Property("TextualHeadersLength"));
- AddProperty(new OhdrMP4StringProperty("ContentID"));
- AddProperty(new OhdrMP4StringProperty("RightsIssuerURL"));
- AddProperty(new MP4BytesProperty("TextualHeaders"));
- }
- MP4OhdrAtom::~MP4OhdrAtom() {
- }
- /*! \brief Read atom.
- */
- void MP4OhdrAtom::Read() {
- ReadProperties(0, 8);
- MP4Property* lProperty;
- MP4Property* property;
- lProperty = GetProperty(5);
- property = GetProperty(8);
- ((OhdrMP4StringProperty*)property)->SetFixedLength(
- ((MP4Integer16Property*)lProperty)->GetValue());
- lProperty = GetProperty(6);
- property = GetProperty(9);
- ((OhdrMP4StringProperty*)property)->SetFixedLength(
- ((MP4Integer16Property*)lProperty)->GetValue());
- lProperty = GetProperty(7);
- property = GetProperty(10);
- ((MP4BytesProperty*)property)->SetFixedSize(
- ((MP4Integer16Property*)lProperty)->GetValue());
- ReadProperties(8, 3);
- }
|