aboutsummaryrefslogtreecommitdiff
path: root/lib/ffmpeg/cmdutils.h
diff options
context:
space:
mode:
authorAnssi Hannula <anssi@xbmc.org>2011-02-02 01:29:29 +0200
committerAnssi Hannula <anssi@xbmc.org>2011-02-03 00:16:55 +0200
commit1a6a927ec5a0c305f58fa44bc0d023e007820b64 (patch)
tree480da2a288b605711c96a7315937c33ccf6c8257 /lib/ffmpeg/cmdutils.h
parent4d8e27ceb8c6218f4dd62b381ec786650f594ac9 (diff)
updated: internal ffmpeg to c3beafa0f1
Update internal FFmpeg to c3beafa0f1 from git://git.ffmpeg.org/ffmpeg.git. This update adds a new library, libavcore, which contains common multimedia utilities. Build scripts are updated to handle it (both internal and external). FFmpeg is no longer built with libfaad as it now supports LATM AAC audio natively. The unused build_xbmc.sh script is removed. The patchset in ffmpeg/patches has been updated, removals and additions are documented below. The following patches have been removed as no longer necessary: - Ticket #5481 - added support for LATM encapsulated AAC audio streams within FFmpeg (thanks Paul Kendall). - re-add libfaad wrapper to ffmpeg for now - added: ffmpeg spdif demuxer (fixes ac3-in-wav) - ffmpeg issue2137 patch for MKV (fixes #9014) - ffmpeg issue2137 patch for AVI (fixes #9014) - fixed: bitstream mode improperly set. Ticket #10981. - Add av_popcount() to libavutil/common.h and bump minor version - added: export DTS profile information in ffmpeg - Add av_get_profile_name() to get profile names. - Show profile in avcodec_string(). - libfaac: add recognized profiles array - dca: add profile names - h264: add profile names for the existing defines - dca: consider a stream with XXCh/X96 in ExSS as DTS-HD HRA - added: metadata support to oggenc with vorbis streams (submitted upstream Issue #555) The following patch has been removed as its purpose is unclear and upstream code has diverged (passthrough works even without it): - Setup wanted pkt size in spdif muxers header parser The following patch: - When PMT is found, we have found mpegts header information, and av_find_stream_info doesn't need to read more to find streams has been re-replaced with - Speed up mpegts av_find_stream_info. The latter was apparently accidentally reverted in the previous FFmpeg update. The following patch has been added to fix a build regression with the configure flags we use on darwin: - swscale: fix build with --enable-runtime-cpudetect --disable-mmx/mmx2/amd3dnow
Diffstat (limited to 'lib/ffmpeg/cmdutils.h')
-rw-r--r--lib/ffmpeg/cmdutils.h85
1 files changed, 82 insertions, 3 deletions
diff --git a/lib/ffmpeg/cmdutils.h b/lib/ffmpeg/cmdutils.h
index d48abab30e..c3d8a42453 100644
--- a/lib/ffmpeg/cmdutils.h
+++ b/lib/ffmpeg/cmdutils.h
@@ -37,14 +37,29 @@ extern const char program_name[];
*/
extern const int program_birth_year;
-extern const int this_year;
-
extern const char **opt_names;
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.
*/
@@ -132,7 +147,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 +235,68 @@ 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);
+
+/**
+ * Get a file corresponding to a preset file.
+ *
+ * If is_path is non-zero, look for the file in the path preset_name.
+ * Otherwise search for a file named arg.ffpreset in the directories
+ * $FFMPEG_DATADIR (if set), $HOME/.ffmpeg, and in the datadir defined
+ * at configuration time, in that order. If no such file is found and
+ * codec_name is defined, then search for a file named
+ * codec_name-preset_name.ffpreset in the above-mentioned directories.
+ *
+ * @param filename buffer where the name of the found filename is written
+ * @param filename_size size in bytes of the filename buffer
+ * @param preset_name name of the preset to search
+ * @param is_path tell if preset_name is a filename path
+ * @param codec_name name of the codec for which to look for the
+ * preset, may be NULL
+ */
+FILE *get_preset_file(char *filename, size_t filename_size,
+ const char *preset_name, int is_path, const char *codec_name);
+
+#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 */