summaryrefslogtreecommitdiffstats
path: root/common/encode_lavc.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/encode_lavc.c')
-rw-r--r--common/encode_lavc.c81
1 files changed, 32 insertions, 49 deletions
diff --git a/common/encode_lavc.c b/common/encode_lavc.c
index bf77f04969..33743007dd 100644
--- a/common/encode_lavc.c
+++ b/common/encode_lavc.c
@@ -23,7 +23,6 @@
#include <libavutil/avutil.h>
#include <libavutil/timestamp.h>
-#include "config.h"
#include "encode_lavc.h"
#include "common/av_common.h"
#include "common/global.h"
@@ -84,30 +83,15 @@ const struct m_sub_options encode_config = {
{"ovcopts", OPT_KEYVALUELIST(vopts), .flags = M_OPT_HAVE_HELP},
{"oac", OPT_STRING(acodec)},
{"oacopts", OPT_KEYVALUELIST(aopts), .flags = M_OPT_HAVE_HELP},
- {"ovoffset", OPT_FLOAT(voffset), M_RANGE(-1000000.0, 1000000.0),
- .deprecation_message = "--audio-delay (once unbroken)"},
- {"oaoffset", OPT_FLOAT(aoffset), M_RANGE(-1000000.0, 1000000.0),
- .deprecation_message = "--audio-delay (once unbroken)"},
- {"orawts", OPT_FLAG(rawts)},
- {"ovfirst", OPT_FLAG(video_first),
- .deprecation_message = "no replacement"},
- {"oafirst", OPT_FLAG(audio_first),
- .deprecation_message = "no replacement"},
- {"ocopy-metadata", OPT_FLAG(copy_metadata)},
+ {"orawts", OPT_BOOL(rawts)},
+ {"ocopy-metadata", OPT_BOOL(copy_metadata)},
{"oset-metadata", OPT_KEYVALUELIST(set_metadata)},
{"oremove-metadata", OPT_STRINGLIST(remove_metadata)},
-
- {"ocopyts", OPT_REMOVED("ocopyts is now the default")},
- {"oneverdrop", OPT_REMOVED("no replacement")},
- {"oharddup", OPT_REMOVED("use --vf-add=fps=VALUE")},
- {"ofps", OPT_REMOVED("no replacement (use --vf-add=fps=VALUE for CFR)")},
- {"oautofps", OPT_REMOVED("no replacement")},
- {"omaxfps", OPT_REMOVED("no replacement")},
{0}
},
.size = sizeof(struct encode_opts),
.defaults = &(const struct encode_opts){
- .copy_metadata = 1,
+ .copy_metadata = true,
},
};
@@ -120,7 +104,7 @@ struct encode_lavc_context *encode_lavc_init(struct mpv_global *global)
.priv = talloc_zero(ctx, struct encode_priv),
.log = mp_log_new(ctx, global->log, "encode"),
};
- pthread_mutex_init(&ctx->lock, NULL);
+ mp_mutex_init(&ctx->lock);
struct encode_priv *p = ctx->priv;
p->log = ctx->log;
@@ -133,12 +117,6 @@ struct encode_lavc_context *encode_lavc_init(struct mpv_global *global)
if (!strcmp(filename, "-"))
filename = "pipe:1";
- if (filename && (
- !strcmp(filename, "/dev/stdout") ||
- !strcmp(filename, "pipe:") ||
- !strcmp(filename, "pipe:1")))
- mp_msg_force_stderr(global, true);
-
encode_lavc_discontinuity(ctx);
p->muxer = avformat_alloc_context();
@@ -173,7 +151,7 @@ void encode_lavc_set_metadata(struct encode_lavc_context *ctx,
{
struct encode_priv *p = ctx->priv;
- pthread_mutex_lock(&ctx->lock);
+ mp_mutex_lock(&ctx->lock);
if (ctx->options->copy_metadata) {
p->metadata = mp_tags_dup(ctx, metadata);
@@ -200,7 +178,7 @@ void encode_lavc_set_metadata(struct encode_lavc_context *ctx,
}
}
- pthread_mutex_unlock(&ctx->lock);
+ mp_mutex_unlock(&ctx->lock);
}
bool encode_lavc_free(struct encode_lavc_context *ctx)
@@ -236,7 +214,7 @@ bool encode_lavc_free(struct encode_lavc_context *ctx)
res = !p->failed;
- pthread_mutex_destroy(&ctx->lock);
+ mp_mutex_destroy(&ctx->lock);
talloc_free(ctx);
return res;
@@ -329,7 +307,7 @@ void encode_lavc_expect_stream(struct encode_lavc_context *ctx,
{
struct encode_priv *p = ctx->priv;
- pthread_mutex_lock(&ctx->lock);
+ mp_mutex_lock(&ctx->lock);
enum AVMediaType codec_type = mp_to_av_stream_type(type);
@@ -353,7 +331,7 @@ void encode_lavc_expect_stream(struct encode_lavc_context *ctx,
MP_TARRAY_APPEND(p, p->streams, p->num_streams, dst);
done:
- pthread_mutex_unlock(&ctx->lock);
+ mp_mutex_unlock(&ctx->lock);
}
// Signal that you are ready to encode (you provide the codec params etc. too).
@@ -367,7 +345,7 @@ static void encode_lavc_add_stream(struct encoder_context *enc,
{
struct encode_priv *p = ctx->priv;
- pthread_mutex_lock(&ctx->lock);
+ mp_mutex_lock(&ctx->lock);
struct mux_stream *dst = find_mux_stream(ctx, info->codecpar->codec_type);
if (!dst) {
@@ -403,7 +381,7 @@ static void encode_lavc_add_stream(struct encoder_context *enc,
maybe_init_muxer(ctx);
done:
- pthread_mutex_unlock(&ctx->lock);
+ mp_mutex_unlock(&ctx->lock);
}
// Write a packet. This will take over ownership of `pkt`
@@ -414,7 +392,7 @@ static void encode_lavc_add_packet(struct mux_stream *dst, AVPacket *pkt)
assert(dst->st);
- pthread_mutex_lock(&ctx->lock);
+ mp_mutex_lock(&ctx->lock);
if (p->failed)
goto done;
@@ -451,7 +429,7 @@ static void encode_lavc_add_packet(struct mux_stream *dst, AVPacket *pkt)
pkt = NULL;
done:
- pthread_mutex_unlock(&ctx->lock);
+ mp_mutex_unlock(&ctx->lock);
if (pkt)
av_packet_unref(pkt);
}
@@ -466,9 +444,9 @@ void encode_lavc_discontinuity(struct encode_lavc_context *ctx)
if (!ctx)
return;
- pthread_mutex_lock(&ctx->lock);
+ mp_mutex_lock(&ctx->lock);
ctx->discontinuity_pts_offset = MP_NOPTS_VALUE;
- pthread_mutex_unlock(&ctx->lock);
+ mp_mutex_unlock(&ctx->lock);
}
static void encode_lavc_printoptions(struct mp_log *log, const void *obj,
@@ -689,7 +667,7 @@ int encode_lavc_getstatus(struct encode_lavc_context *ctx,
float minutes, megabytes, fps, x;
float f = MPMAX(0.0001, relative_position);
- pthread_mutex_lock(&ctx->lock);
+ mp_mutex_lock(&ctx->lock);
if (p->failed) {
snprintf(buf, bufsize, "(failed)\n");
@@ -713,7 +691,7 @@ int encode_lavc_getstatus(struct encode_lavc_context *ctx,
buf[bufsize - 1] = 0;
done:
- pthread_mutex_unlock(&ctx->lock);
+ mp_mutex_unlock(&ctx->lock);
return 0;
}
@@ -721,9 +699,9 @@ bool encode_lavc_didfail(struct encode_lavc_context *ctx)
{
if (!ctx)
return false;
- pthread_mutex_lock(&ctx->lock);
+ mp_mutex_lock(&ctx->lock);
bool fail = ctx->priv->failed;
- pthread_mutex_unlock(&ctx->lock);
+ mp_mutex_unlock(&ctx->lock);
return fail;
}
@@ -732,6 +710,7 @@ static void encoder_destroy(void *ptr)
struct encoder_context *p = ptr;
av_packet_free(&p->pkt);
+ avcodec_parameters_free(&p->info.codecpar);
avcodec_free_context(&p->encoder);
free_stream(p->twopass_bytebuffer);
}
@@ -885,8 +864,8 @@ bool encoder_init_codec_and_muxer(struct encoder_context *p,
" ********************************************\n\n"
"This means the output file may be broken or bad.\n"
"Possible reasons, problems, workarounds:\n"
- "- Codec implementation in ffmpeg/libav is not finished yet.\n"
- " Try updating ffmpeg or libav.\n"
+ "- Codec implementation in ffmpeg is not finished yet.\n"
+ " Try updating ffmpeg.\n"
"- Bad picture quality, blocks, blurriness.\n"
" Experiment with codec settings to maybe still get the\n"
" desired quality output at the expense of bitrate.\n"
@@ -921,7 +900,7 @@ bool encoder_init_codec_and_muxer(struct encoder_context *p,
return true;
fail:
- avcodec_close(p->encoder);
+ avcodec_free_context(&p->encoder);
return false;
}
@@ -961,13 +940,17 @@ fail:
return false;
}
-double encoder_get_offset(struct encoder_context *p)
+void encoder_update_log(struct mpv_global *global)
{
- switch (p->encoder->codec_type) {
- case AVMEDIA_TYPE_VIDEO: return p->options->voffset;
- case AVMEDIA_TYPE_AUDIO: return p->options->aoffset;
- default: return 0;
+ struct encode_opts *options = mp_get_config_group(NULL, global, &encode_config);
+ if (options->file && (!strcmp(options->file, "-") ||
+ !strcmp(options->file, "/dev/stdout") ||
+ !strcmp(options->file, "pipe:") ||
+ !strcmp(options->file, "pipe:1")))
+ {
+ mp_msg_force_stderr(global, true);
}
+ talloc_free(options);
}
// vim: ts=4 sw=4 et