38 #define OFFSET(x) offsetof(struct HashContext, x) 39 #define ENC AV_OPT_FLAG_ENCODING_PARAM 40 #define HASH_OPT(defaulttype) \ 41 { "hash", "set hash to use", OFFSET(hash_name), AV_OPT_TYPE_STRING, {.str = defaulttype}, 0, 0, ENC } 42 #define FORMAT_VERSION_OPT \ 43 { "format_version", "file format version", OFFSET(format_version), AV_OPT_TYPE_INT, {.i64 = 2}, 1, 2, ENC } 46 static const AVOption hash_options[] = {
52 #if CONFIG_FRAMEHASH_MUXER 53 static const AVOption framehash_options[] = {
60 #if CONFIG_STREAMHASH_MUXER 61 static const AVOption streamhash_options[] = {
68 static const AVOption md5_options[] = {
74 #if CONFIG_FRAMEMD5_MUXER 75 static const AVOption framemd5_options[] = {
82 #if CONFIG_HASH_MUXER || CONFIG_MD5_MUXER 99 #if CONFIG_STREAMHASH_MUXER 119 #if CONFIG_HASH_MUXER || CONFIG_MD5_MUXER || CONFIG_STREAMHASH_MUXER 143 for (
int i = 0;
i < num_hashes;
i++) {
165 for (
int i = 0;
i < num_hashes;
i++) {
173 #if CONFIG_HASH_MUXER 174 static const AVClass hashenc_class = {
177 .option = hash_options,
188 .write_packet = hash_write_packet,
189 .write_trailer = hash_write_trailer,
193 .priv_class = &hashenc_class,
198 static const AVClass md5enc_class = {
201 .option = md5_options,
212 .write_packet = hash_write_packet,
213 .write_trailer = hash_write_trailer,
217 .priv_class = &md5enc_class,
221 #if CONFIG_STREAMHASH_MUXER 222 static const AVClass streamhashenc_class = {
225 .option = streamhash_options,
230 .
name =
"streamhash",
235 .init = streamhash_init,
236 .write_packet = hash_write_packet,
237 .write_trailer = hash_write_trailer,
241 .priv_class = &streamhashenc_class,
245 #if CONFIG_FRAMEHASH_MUXER || CONFIG_FRAMEMD5_MUXER 287 framehash_print_extradata(s);
289 avio_printf(s->
pb,
"#stream#, dts, pts, duration, size, hash\n");
339 #if CONFIG_FRAMEHASH_MUXER 340 static const AVClass framehash_class = {
343 .option = framehash_options,
353 .init = framehash_init,
354 .write_header = framehash_write_header,
355 .write_packet = framehash_write_packet,
356 .deinit = framehash_free,
359 .priv_class = &framehash_class,
363 #if CONFIG_FRAMEMD5_MUXER 364 static const AVClass framemd5_class = {
367 .option = framemd5_options,
377 .init = framehash_init,
378 .write_header = framehash_write_header,
379 .write_packet = framehash_write_packet,
380 .deinit = framehash_free,
383 .priv_class = &framemd5_class,
#define LIBAVUTIL_VERSION_INT
const char * av_default_item_name(void *ptr)
Return the context name.
This struct describes the properties of an encoded stream.
#define AV_HASH_MAX_SIZE
Maximum value that av_hash_get_size() will currently return.
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
struct AVHashContext ** hashes
Opaque data information usually continuous.
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
AVStream ** streams
A list of all streams in the file.
#define FORMAT_VERSION_OPT
void avio_write(AVIOContext *s, const unsigned char *buf, int size)
void av_hash_init(AVHashContext *ctx)
Initialize or reset a hash context.
#define i(width, name, range_min, range_max)
An AV_PKT_DATA_PALETTE side data packet contains exactly AVPALETTE_SIZE bytes worth of palette...
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
enum AVMediaType codec_type
General type of the encoded data.
simple assert() macros that are a bit more flexible than ISO C assert().
enum AVPacketSideDataType type
int av_hash_alloc(AVHashContext **ctx, const char *name)
Allocate a hash context for the algorithm specified by name.
int extradata_size
Size of the extradata content in bytes.
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
const char * av_hash_get_name(const AVHashContext *ctx)
Opaque data information usually sparse.
int ff_framehash_write_header(AVFormatContext *s)
Set the timebase for each stream from the corresponding codec timebase and print it.
static char get_media_type_char(enum AVMediaType type)
AVIOContext * pb
I/O context.
void av_hash_update(AVHashContext *ctx, const uint8_t *src, int len)
Update a hash context with additional data.
Describe the class of an AVClass context structure.
void av_hash_freep(AVHashContext **ctx)
Free hash context and set hash context pointer to NULL.
void av_hash_final_hex(struct AVHashContext *ctx, uint8_t *dst, int size)
Finalize a hash context and store the hexadecimal representation of the actual hash value as a string...
size_t av_strlcatf(char *dst, size_t size, const char *fmt,...)
AVPacketSideData * side_data
Additional packet data that can be provided by the container.
void * priv_data
Format private data.
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent.
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed...
AVCodecParameters * codecpar
Codec parameters associated with this stream.
#define HASH_OPT(defaulttype)
This structure stores compressed data.
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
int avio_printf(AVIOContext *s, const char *fmt,...) av_printf_format(2
Writes a formatted string to the context.
void * av_mallocz_array(size_t nmemb, size_t size)
Allocate a memory block for an array with av_mallocz().