On Mon, 18 Dec 2017 21:38:24 +0100
Michael Niedermayer <mich...@niedermayer.cc> wrote:

> On Mon, Dec 18, 2017 at 04:56:08PM -0300, James Almer wrote:
> > On 12/18/2017 4:52 PM, wm4 wrote:  
> > > On Fri, 15 Dec 2017 14:24:17 -0800
> > > Jacob Trimble <modmaker-at-google....@ffmpeg.org> wrote:
> > >   
> > >> From a1b2cbcb7da4da69685f8f1299b70b672ce448e3 Mon Sep 17 00:00:00 2001
> > >> From: Jacob Trimble <modma...@google.com>
> > >> Date: Tue, 5 Dec 2017 14:52:22 -0800
> > >> Subject: [PATCH] avcodec/avcodec.h: Add encryption info side data.
> > >>
> > >> This new side-data will contain info on how a packet is encrypted.
> > >> This allows the app to handle packet decryption.  To allow for a
> > >> variable number of subsamples, the buffer for the side-data will be
> > >> allocated to hold both the structure and the array of subsamples.  So
> > >> the |subsamples| member will point to right after the struct.
> > >>
> > >> Signed-off-by: Jacob Trimble <modma...@google.com>
> > >> ---
> > >>  libavcodec/avcodec.h | 70 
> > >> ++++++++++++++++++++++++++++++++++++++++++++++++++++
> > >>  1 file changed, 70 insertions(+)
> > >>
> > >> diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
> > >> index 5db6a81320..ccc89345e8 100644
> > >> --- a/libavcodec/avcodec.h
> > >> +++ b/libavcodec/avcodec.h
> > >> @@ -1112,6 +1112,63 @@ typedef struct AVCPBProperties {
> > >>      uint64_t vbv_delay;
> > >>  } AVCPBProperties;
> > >>  
> > >> +typedef struct AVPacketSubsampleEncryptionInfo {
> > >> +    /** The number of bytes that are clear. */
> > >> +    unsigned int bytes_of_clear_data;
> > >> +
> > >> +    /**
> > >> +     * The number of bytes that are protected.  If using pattern 
> > >> encryption,
> > >> +     * the pattern applies to only the protected bytes; if not using 
> > >> pattern
> > >> +     * encryption, all these bytes are encrypted.
> > >> +     */
> > >> +    unsigned int bytes_of_protected_data;
> > >> +} AVPacketSubsampleEncryptionInfo;
> > >> +
> > >> +/**
> > >> + * This describes encryption info for a packet.  This contains 
> > >> frame-specific
> > >> + * info for how to decrypt the packet before passing it to the decoder. 
> > >>  If this
> > >> + * side-data is present, then the packet is encrypted.
> > >> + */
> > >> +typedef struct AVPacketEncryptionInfo {
> > >> +    /** The fourcc encryption scheme. */
> > >> +    uint32_t scheme;
> > >> +
> > >> +    /** The ID of the key used to encrypt the packet. */
> > >> +    uint8_t key_id[16];
> > >> +
> > >> +    /** The initialization vector. */
> > >> +    uint8_t iv[16];
> > >> +
> > >> +    /**
> > >> +     * Only used for pattern encryption.  This is the number of 16-byte 
> > >> blocks
> > >> +     * that are encrypted.
> > >> +     */
> > >> +    unsigned int crypt_byte_block;
> > >> +
> > >> +    /**
> > >> +     * Only used for pattern encryption.  This is the number of 16-byte 
> > >> blocks
> > >> +     * that are clear.
> > >> +     */
> > >> +    unsigned int skip_byte_block;
> > >> +
> > >> +    /**
> > >> +     * The number of sub-samples in this packet.  If 0, then the whole 
> > >> sample
> > >> +     * is encrypted.
> > >> +     */
> > >> +    unsigned int subsample_count;
> > >> +
> > >> +    /** The subsample encryption info. */
> > >> +    AVPacketSubsampleEncryptionInfo *subsamples;  
> > > 
> > > I don't think this is sane. So far, side data could simply be copied
> > > with memcpy, and having pointers to non-static data in side data would
> > > break this completely.  
> > 
> > Even more reasons to ditch the current side data API and come up with a
> > better designed one that can also be reused for packet, frame and
> > container needs.  
> 
> yes, 
> also if its redesigned, it should become possible to pass it over the
> network. Currently all side data depends on the platform ABI, so its
> only valid on the platform its created on. That also makes it different
> from all other data, AVPacket.data and extradata are all
> platform independant. And there is no API to
> convert it into a platform ABI independant form. 

Why should it be transferable over network? That makes no sense. We
don't have the ability to transfer AVFrame, AVPacket, or AVCodecContext
over network either.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to