X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=cmdutils.h;h=b431b2ef9976858c60a234917602498eb3def910;hb=be63b4ba22a3b1961599fb8cfe4a513693023e13;hp=1dfe68e3655e46207320006e888c450ae6765b27;hpb=48966b02cb9caae7b51a16e8afcc9e69ccb25f2a;p=ffmpeg diff --git a/cmdutils.h b/cmdutils.h index 1dfe68e3655..b431b2ef997 100644 --- a/cmdutils.h +++ b/cmdutils.h @@ -44,6 +44,23 @@ extern AVCodecContext *avcodec_opts[AVMEDIA_TYPE_NB]; extern AVFormatContext *avformat_opts; extern struct SwsContext *sws_opts; +/** + * Initialize the cmdutils option system, in particular + * allocate the *_opts contexts. + */ +void init_opts(void); +/** + * Uninitialize the cmdutils option system, in particular + * free the *_opts contexts and their contents. + */ +void uninit_opts(void); + +/** + * Trivial log callback. + * Only suitable for show_help and similar since it lacks prefix handling. + */ +void log_callback_help(void* ptr, int level, const char* fmt, va_list vl); + /** * Fallback for options that are not explicitly handled, these will be * parsed through AVOptions. @@ -124,7 +141,7 @@ void show_help_options(const OptionDef *options, const char *msg, int mask, int /** * Parse the command line arguments. * @param options Array with the definitions required to interpret every - * option of the form: - [] + * option of the form: -option_name [argument] * @param parse_arg_function Name of the function called to process every * argument without a leading option name flag. NULL if such arguments do * not have to be processed. @@ -132,7 +149,7 @@ void show_help_options(const OptionDef *options, const char *msg, int mask, int void parse_options(int argc, char **argv, const OptionDef *options, void (* parse_arg_function)(const char*)); -void set_context_opts(void *ctx, void *opts_ctx, int flags); +void set_context_opts(void *ctx, void *opts_ctx, int flags, AVCodec *codec); /** * Print an error message to stderr, indicating filename and a human @@ -220,4 +237,48 @@ int read_yesno(void); */ int read_file(const char *filename, char **bufptr, size_t *size); +typedef struct { + int64_t num_faulty_pts; /// Number of incorrect PTS values so far + int64_t num_faulty_dts; /// Number of incorrect DTS values so far + int64_t last_pts; /// PTS of the last frame + int64_t last_dts; /// DTS of the last frame +} PtsCorrectionContext; + +/** + * Reset the state of the PtsCorrectionContext. + */ +void init_pts_correction(PtsCorrectionContext *ctx); + +/** + * Attempt to guess proper monotonic timestamps for decoded video frames + * which might have incorrect times. Input timestamps may wrap around, in + * which case the output will as well. + * + * @param pts the pts field of the decoded AVPacket, as passed through + * AVCodecContext.reordered_opaque + * @param dts the dts field of the decoded AVPacket + * @return one of the input values, may be AV_NOPTS_VALUE + */ +int64_t guess_correct_pts(PtsCorrectionContext *ctx, int64_t pts, int64_t dts); + +#if CONFIG_AVFILTER +#include "libavfilter/avfilter.h" + +typedef struct { + enum PixelFormat pix_fmt; +} FFSinkContext; + +extern AVFilter ffsink; + +/** + * Extract a frame from sink. + * + * @return a negative error in case of failure, 1 if one frame has + * been extracted successfully. + */ +int get_filtered_video_frame(AVFilterContext *sink, AVFrame *frame, + AVFilterBufferRef **picref, AVRational *pts_tb); + +#endif /* CONFIG_AVFILTER */ + #endif /* FFMPEG_CMDUTILS_H */