diff options
author | Jacob Trimble <modmaker@google.com> | 2017-12-06 16:17:54 -0800 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2018-04-19 03:15:32 +0200 |
commit | f7221d8e670ec05471a16cc4cc1cc8e0040b5b5f (patch) | |
tree | c9254af6d7032623a477b53cd6f5f35217568756 /libavformat/isom.h | |
parent | 37175122824d2706e8d2f67fc067b189ac400cd2 (diff) | |
download | ffmpeg-f7221d8e670ec05471a16cc4cc1cc8e0040b5b5f.tar.gz |
avformat/mov: Increase support for common encryption.
- Parse schm atom to get different encryption schemes.
- Allow senc atom to appear in track fragments.
- Allow 16-byte IVs.
- Allow constant IVs (specified in tenc).
- Allow only tenc to specify encryption (i.e. no senc/saiz/saio).
- Use sample descriptor to detect clear fragments.
This doesn't support:
- Different sample descriptor holding different encryption info.
- Only first sample descriptor can be encrypted.
- Encrypted sample groups (i.e. seig).
- Non-'cenc' encryption scheme when using -decryption_key.
Signed-off-by: Jacob Trimble <modmaker@google.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavformat/isom.h')
-rw-r--r-- | libavformat/isom.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/libavformat/isom.h b/libavformat/isom.h index 4da34142f0..eb942cf882 100644 --- a/libavformat/isom.h +++ b/libavformat/isom.h @@ -27,6 +27,7 @@ #include <stddef.h> #include <stdint.h> +#include "libavutil/encryption_info.h" #include "libavutil/mastering_display_metadata.h" #include "libavutil/spherical.h" #include "libavutil/stereo3d.h" @@ -108,12 +109,20 @@ typedef struct MOVSbgp { unsigned int index; } MOVSbgp; +typedef struct MOVEncryptionIndex { + // Individual encrypted samples. If there are no elements, then the default + // settings will be used. + unsigned int nb_encrypted_samples; + AVEncryptionInfo **encrypted_samples; +} MOVEncryptionIndex; + typedef struct MOVFragmentStreamInfo { int id; int64_t sidx_pts; int64_t first_tfra_pts; int64_t tfdt_dts; int index_entry; + MOVEncryptionIndex *encryption_index; } MOVFragmentStreamInfo; typedef struct MOVFragmentIndexItem { @@ -215,6 +224,7 @@ typedef struct MOVStreamContext { int has_sidx; // If there is an sidx entry for this stream. struct { + // TODO: Remove once old methods are removed from mov.c int use_subsamples; uint8_t* auxiliary_info; uint8_t* auxiliary_info_end; @@ -223,7 +233,11 @@ typedef struct MOVStreamContext { uint8_t* auxiliary_info_sizes; size_t auxiliary_info_sizes_count; int64_t auxiliary_info_index; + struct AVAESCTR* aes_ctr; + unsigned int per_sample_iv_size; // Either 0, 8, or 16. + AVEncryptionInfo *default_encrypted_sample; + MOVEncryptionIndex *encryption_index; } cenc; } MOVStreamContext; |