[vlc-devel] [PATCH V3] dcp: Creation of access-demux module for DCP (using asdcplib)

Nicolas Bertrand nicoinattendu at gmail.com
Fri Sep 6 17:56:56 CEST 2013


Le 02/09/2013 19:00, Rémi Denis-Courmont a écrit :
> Le lundi 2 septembre 2013 16:42:10 Rémi Denis-Courmont a écrit :
>> On Mon, 02 Sep 2013 16:16:36 +0200, Nicolas Bertrand
>>

>
> For demuxers, there are two ways to avoid memory copying. A custom block_t
> allocator/deallocator can be created with block_Init(). This is more flexible
> but more prone to implementation errors.
Event with that method  I don't get the implementatipon on how to avoid 
the memcpy.

First I do a block init
and then I made some
block_alloc/release instead of MemCpy or a block_realloc ?


>
> Alternatively, custom callbacks for output frame buffer allocation can be
> provided to the library (most libraries support that).
Looks like I have nothing for that on the lib :
FrameBuffer API:
class FrameBuffer
     {
       ASDCP_NO_COPY_CONSTRUCT(FrameBuffer);

     protected:
       byte_t* m_Data;          // pointer to memory area containing 
frame data
       ui32_t  m_Capacity;      // size of memory area pointed to by m_Data
       bool    m_OwnMem;        // if false, m_Data points to externally 
allocated memory
       ui32_t  m_Size;          // size of frame data in memory area 
pointed to by m_Data
       ui32_t  m_FrameNumber;   // delivery-order frame number

       // It is possible to read raw ciphertext from an encrypted AS-DCP 
file.
       // After reading an encrypted AS-DCP file in raw mode, the frame 
buffer will
       // contain the encrypted source value portion of the Encrypted 
Triplet, followed
       // by the integrity pack, if it exists.
       // The buffer will begin with the IV and CheckValue, followed by 
encrypted essence
       // and optional integrity pack
       // The SourceLength and PlaintextOffset values from the packet 
will be held in the
       // following variables:
       ui32_t  m_SourceLength;       // plaintext length (delivered 
plaintext+decrypted ciphertext)
       ui32_t  m_PlaintextOffset;    // offset to first byte of ciphertext

      public:
       FrameBuffer();
       virtual ~FrameBuffer();

       // Instructs the object to use an externally allocated buffer. 
The external
       // buffer will not be cleaned up by the frame buffer when it exits.
       // Call with (0,0) to revert to internally allocated buffer.
       // Returns error if the buf_addr argument is NULL and buf_size is 
non-zero.
       Result_t SetData(byte_t* buf_addr, ui32_t buf_size);

       // Sets the size of the internally allocate buffer. Returns 
RESULT_CAPEXTMEM
       // if the object is using an externally allocated buffer via 
SetData();
       // Resets content size to zero.
       Result_t Capacity(ui32_t cap);

       // returns the size of the buffer
       inline ui32_t  Capacity() const { return m_Capacity; }

       // returns a const pointer to the essence data
       inline const byte_t* RoData() const { return m_Data; }

       // returns a non-const pointer to the essence data
       inline byte_t* Data() { return m_Data; }

       // set the size of the buffer's contents
       inline ui32_t  Size(ui32_t size) { return m_Size = size; }

       // returns the size of the buffer's contents
       inline ui32_t  Size() const { return m_Size; }

       // Sets the absolute frame number of this frame in the file in 
delivery order.
       inline void    FrameNumber(ui32_t num) { m_FrameNumber = num; }

       // Returns the absolute frame number of this frame in the file in 
delivery order.
       inline ui32_t  FrameNumber() const { return m_FrameNumber; }

       // Sets the length of the plaintext essence data
       inline void    SourceLength(ui32_t len) { m_SourceLength = len; }

       // When this value is 0 (zero), the buffer contains only 
plaintext. When it is
       // non-zero, the buffer contains raw ciphertext and the return 
value is the length
       // of the original plaintext.
       inline ui32_t  SourceLength() const { return m_SourceLength; }

       // Sets the offset into the buffer at which encrypted data begins
       inline void    PlaintextOffset(ui32_t ofst) { m_PlaintextOffset = 
ofst; }

       // Returns offset into buffer of first byte of ciphertext.
       inline ui32_t  PlaintextOffset() const { return m_PlaintextOffset; }
     };

>




More information about the vlc-devel mailing list