diff options
author | wm4 <wm4@nowhere> | 2013-12-04 20:12:14 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2013-12-04 23:12:51 +0100 |
commit | 8a84da8102cb9c436627a61cd3b674a8ad3e9708 (patch) | |
tree | 9329d8af1d4239b50a5605788286ef43f5ef3871 /mpvcore/av_common.h | |
parent | e2dfdc0c7ed5542b0211bb405ad3564bb72e3dee (diff) | |
download | mpv-8a84da8102cb9c436627a61cd3b674a8ad3e9708.tar.bz2 mpv-8a84da8102cb9c436627a61cd3b674a8ad3e9708.tar.xz |
av_common: add timebase parameter to mp_set_av_packet()
If the timebase is set, it's used for converting the packet timestamps.
Otherwise, the previous method of reinterpret-casting the mpv style
double timestamps to libavcodec style int64_t timestamps is used.
Also replace the kind of awkward mp_get_av_frame_pkt_ts() function by
mp_pts_from_av(), which simply converts timestamps in a way the old
function did. (Plus it takes a timebase parameter, similar to the
addition to mp_set_av_packet().)
Note that this should not change anything yet. The code in ad_lavc.c and
vd_lavc.c passes NULL for the timebase parameters. We could set
AVCodecContext.pkt_timebase and use that if we want to give libavcodec
"proper" timestamps.
This could be important for ad_lavc.c: some codecs (opus, probably mp3
and aac too) have weird requirements about doing decoding preroll on the
container level, and thus require adjusting the audio start timestamps
in some cases. libavcodec doesn't tell us how much was skipped, so we
either get shifted timestamps (by the length of the skipped data), or we
give it proper timestamps. (Note: libavcodec interprets or changes
timestamps only if pkt_timebase is set, which by default it is not.)
This would require selecting a timebase though, so I feel uncomfortable
with the idea. At least this change paves the way, and will allow some
testing.
Diffstat (limited to 'mpvcore/av_common.h')
-rw-r--r-- | mpvcore/av_common.h | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/mpvcore/av_common.h b/mpvcore/av_common.h index 103185329c..e457628979 100644 --- a/mpvcore/av_common.h +++ b/mpvcore/av_common.h @@ -18,15 +18,19 @@ #ifndef MP_AVCOMMON_H #define MP_AVCOMMON_H +#include <inttypes.h> + #include <libavutil/avutil.h> +#include <libavutil/rational.h> #include <libavcodec/avcodec.h> struct mp_decoder_list; struct demux_packet; void mp_copy_lav_codec_headers(AVCodecContext *avctx, AVCodecContext *st); -void mp_set_av_packet(AVPacket *dst, struct demux_packet *mpkt); -void mp_get_av_frame_pkt_ts(AVFrame *frame, double *out_pts, double *out_dts); +void mp_set_av_packet(AVPacket *dst, struct demux_packet *mpkt, AVRational *tb); +int64_t mp_pts_to_av(double mp_pts, AVRational *tb); +double mp_pts_from_av(int64_t av_pts, AVRational *tb); void mp_add_lavc_decoders(struct mp_decoder_list *list, enum AVMediaType type); int mp_codec_to_av_codec_id(const char *codec); const char *mp_codec_from_av_codec_id(int codec_id); |