Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Monteath <james@blender.org>2021-06-01 16:07:46 +0300
committerJeroen Bakker <jeroen@blender.org>2021-06-01 16:18:11 +0300
commit8a63466ca3380479a92a65b670a074277d9a8671 (patch)
treece89d6a394431a36770de9bb4421a41962862194 /intern/ffmpeg/ffmpeg_compat.h
parentee54a8ace753a56236f5d1d647da7a40904af6b3 (diff)
parent6899dcab5339d1f17dd2ea665a38e4ab28ab23fc (diff)
BuildBot: Cleanup
Removing scripts that were placed in the source tree that would drive the old buildbot. With the new buildbot in place these scripts aren't being used anymore. The buildbit is currently driven by `build_files/config/pipeline_config.json`. In the near future make update would also use this config. Overview of the new buildbot: https://wiki.blender.org/wiki/Infrastructure/BuildBot Work done by James Monteath.
Diffstat (limited to 'intern/ffmpeg/ffmpeg_compat.h')
-rw-r--r--intern/ffmpeg/ffmpeg_compat.h49
1 files changed, 49 insertions, 0 deletions
diff --git a/intern/ffmpeg/ffmpeg_compat.h b/intern/ffmpeg/ffmpeg_compat.h
index 54a004d53e2..0c22cf82688 100644
--- a/intern/ffmpeg/ffmpeg_compat.h
+++ b/intern/ffmpeg/ffmpeg_compat.h
@@ -43,6 +43,55 @@
# define FFMPEG_INLINE static inline
#endif
+#if (LIBAVFORMAT_VERSION_MAJOR < 58) || \
+ ((LIBAVFORMAT_VERSION_MAJOR == 58) && (LIBAVFORMAT_VERSION_MINOR < 76))
+# define FFMPEG_USE_DURATION_WORKAROUND 1
+
+/* Before ffmpeg 4.4, package duration calculation used depricated variables to calculate the
+ * packet duration. Use the function from commit
+ * github.com/FFmpeg/FFmpeg/commit/1c0885334dda9ee8652e60c586fa2e3674056586
+ * to calculate the correct framerate for ffmpeg < 4.4.
+ */
+
+FFMPEG_INLINE
+void my_guess_pkt_duration(AVFormatContext *s, AVStream *st, AVPacket *pkt)
+{
+ if (pkt->duration < 0 && st->codecpar->codec_type != AVMEDIA_TYPE_SUBTITLE) {
+ av_log(s,
+ AV_LOG_WARNING,
+ "Packet with invalid duration %" PRId64 " in stream %d\n",
+ pkt->duration,
+ pkt->stream_index);
+ pkt->duration = 0;
+ }
+
+ if (pkt->duration) {
+ return;
+ }
+
+ switch (st->codecpar->codec_type) {
+ case AVMEDIA_TYPE_VIDEO:
+ if (st->avg_frame_rate.num > 0 && st->avg_frame_rate.den > 0) {
+ pkt->duration = av_rescale_q(1, av_inv_q(st->avg_frame_rate), st->time_base);
+ }
+ else if (st->time_base.num * 1000LL > st->time_base.den) {
+ pkt->duration = 1;
+ }
+ break;
+ case AVMEDIA_TYPE_AUDIO: {
+ int frame_size = av_get_audio_frame_duration2(st->codecpar, pkt->size);
+ if (frame_size && st->codecpar->sample_rate) {
+ pkt->duration = av_rescale_q(
+ frame_size, (AVRational){1, st->codecpar->sample_rate}, st->time_base);
+ }
+ break;
+ }
+ default:
+ break;
+ }
+}
+#endif
+
FFMPEG_INLINE
void my_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp)
{