leavittx
leavittx

Reputation: 97

How to embed additional metadata to a video file in libavcodec (FFmpeg C source code fork)

I'm extending an existing codec (Hap) inside ffmpeg library, adding some additional stuff to it (modifying FFmpeg code in my own fork of it)

One of the things I'd like to do is to store a per-file maximum encoded packet size in some global header/metadata so I can use it later while doing decoding (generally, the metadata/info to store can be arbitrary, size is just what I currently need for some specialized decoder I'm writing).

I'm modifying the ffmpeg code file https://github.com/FFmpeg/FFmpeg/blob/master/libavcodec/hapenc.c

EDIT: What I'd like to achieve

My initial incorrect attempt: But I don't currently see any possibility to save any info outside of a single packet being produced by hap_encode function and written to AVPacket *pkt parameter.

  1. Set dict parameter on AVCodecContext *avctx's priv_data:
    av_opt_set_int(avctx->priv_data, "max_compressed_frame_size", <size>, 0);
    av_opt_set(avctx->priv_data, "max_compressed_frame_size", "<size_str>", 0);

Later, while decoding av_opt_get/av_opt_get_int report non-existing key.

  1. Set various AVCodecContext *avctx fields:
    avctx->flags2 = <size>;
    avctx->extradata_size = <size>;
    avctx->ticks_per_frame = <size>;
    avctx->delay = <size>;

They all also seem to be not preserved when doing decoding later (I get just default values from decoder's AVCodecContext)

Upvotes: 0

Views: 249

Answers (0)

Related Questions