mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 04:36:20 +00:00
launcher: Use the output URI extension to set encoding format
And print a description of the encoding profile.
This commit is contained in:
parent
5234885c8a
commit
1e488d4311
3 changed files with 174 additions and 7 deletions
|
@ -504,8 +504,9 @@ _set_rendering_details (GESLauncher * self)
|
||||||
ParsedOptions *opts = &self->priv->parsed_options;
|
ParsedOptions *opts = &self->priv->parsed_options;
|
||||||
|
|
||||||
/* Setup profile/encoding if needed */
|
/* Setup profile/encoding if needed */
|
||||||
if (opts->smartrender || opts->outputuri) {
|
if (opts->outputuri) {
|
||||||
GstEncodingProfile *prof = NULL;
|
GstEncodingProfile *prof = NULL;
|
||||||
|
gchar *format = NULL;
|
||||||
|
|
||||||
if (!opts->format) {
|
if (!opts->format) {
|
||||||
GESProject *proj =
|
GESProject *proj =
|
||||||
|
@ -525,15 +526,27 @@ _set_rendering_details (GESLauncher * self)
|
||||||
|
|
||||||
if (!prof) {
|
if (!prof) {
|
||||||
if (opts->format == NULL)
|
if (opts->format == NULL)
|
||||||
opts->format =
|
opts->format = get_file_extension (opts->outputuri);
|
||||||
g_strdup ("application/ogg:video/x-theora:audio/x-vorbis");
|
|
||||||
|
|
||||||
prof = parse_encoding_profile (opts->format);
|
prof = parse_encoding_profile (opts->format);
|
||||||
|
if (!prof) {
|
||||||
|
warn ("No format specified and couldn't find one from output file extension, " "falling back to theora+vorbis in ogg.");
|
||||||
|
format = opts->format =
|
||||||
|
g_strdup ("application/ogg:video/x-theora:audio/x-vorbis");
|
||||||
|
prof = parse_encoding_profile (opts->format);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free (format);
|
||||||
|
if (!prof) {
|
||||||
|
error ("Could not find any encoding format for %s\n", opts->format);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_print ("Encoding to:\n\n");
|
||||||
|
describe_encoding_profile (prof);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opts->outputuri)
|
opts->outputuri = ensure_uri (opts->outputuri);
|
||||||
opts->outputuri = ensure_uri (opts->outputuri);
|
|
||||||
|
|
||||||
if (!prof
|
if (!prof
|
||||||
|| !ges_pipeline_set_render_settings (self->priv->pipeline,
|
|| !ges_pipeline_set_render_settings (self->priv->pipeline,
|
||||||
opts->outputuri, prof)
|
opts->outputuri, prof)
|
||||||
|
@ -696,7 +709,9 @@ ges_launcher_get_rendering_option_group (GESLauncher * self)
|
||||||
GOptionEntry options[] = {
|
GOptionEntry options[] = {
|
||||||
{"outputuri", 'o', 0, G_OPTION_ARG_STRING, &opts->outputuri,
|
{"outputuri", 'o', 0, G_OPTION_ARG_STRING, &opts->outputuri,
|
||||||
"If set, ges-launch-1.0 will render the timeline instead of playing "
|
"If set, ges-launch-1.0 will render the timeline instead of playing "
|
||||||
"it back. The default rendering format is ogv, containing theora and vorbis.",
|
"it back. If no format `--format` is specified, the outputuri extension"
|
||||||
|
" will be used to determine an encoding format, or default to theora+vorbis"
|
||||||
|
" in ogg if that doesn't work out.",
|
||||||
"<URI>"},
|
"<URI>"},
|
||||||
{"format", 'f', 0, G_OPTION_ARG_STRING, &opts->format,
|
{"format", 'f', 0, G_OPTION_ARG_STRING, &opts->format,
|
||||||
"Set an encoding profile on the command line. "
|
"Set an encoding profile on the command line. "
|
||||||
|
|
143
tools/utils.c
143
tools/utils.c
|
@ -143,3 +143,146 @@ print_enum (GType enum_type)
|
||||||
|
|
||||||
g_type_class_unref (enum_class);
|
g_type_class_unref (enum_class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
print (GstDebugColorFlags c, gboolean err, gboolean nline, const gchar * format,
|
||||||
|
va_list var_args)
|
||||||
|
{
|
||||||
|
GString *str = g_string_new (NULL);
|
||||||
|
GstDebugColorMode color_mode;
|
||||||
|
gchar *color = NULL;
|
||||||
|
const gchar *clear = NULL;
|
||||||
|
|
||||||
|
color_mode = gst_debug_get_color_mode ();
|
||||||
|
#ifdef G_OS_WIN32
|
||||||
|
if (color_mode == GST_DEBUG_COLOR_MODE_UNIX) {
|
||||||
|
#else
|
||||||
|
if (color_mode != GST_DEBUG_COLOR_MODE_OFF) {
|
||||||
|
#endif
|
||||||
|
clear = "\033[00m";
|
||||||
|
color = gst_debug_construct_term_color (c);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (color) {
|
||||||
|
g_string_append (str, color);
|
||||||
|
g_free (color);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_string_append_vprintf (str, format, var_args);
|
||||||
|
|
||||||
|
if (nline)
|
||||||
|
g_string_append_c (str, '\n');
|
||||||
|
|
||||||
|
if (clear)
|
||||||
|
g_string_append (str, clear);
|
||||||
|
|
||||||
|
if (err)
|
||||||
|
g_printerr ("%s", str->str);
|
||||||
|
else
|
||||||
|
g_print ("%s", str->str);
|
||||||
|
|
||||||
|
g_string_free (str, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ok (const gchar * format, ...)
|
||||||
|
{
|
||||||
|
va_list var_args;
|
||||||
|
|
||||||
|
va_start (var_args, format);
|
||||||
|
print (GST_DEBUG_FG_GREEN, FALSE, TRUE, format, var_args);
|
||||||
|
va_end (var_args);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
warn (const gchar * format, ...)
|
||||||
|
{
|
||||||
|
va_list var_args;
|
||||||
|
|
||||||
|
va_start (var_args, format);
|
||||||
|
print (GST_DEBUG_FG_YELLOW, TRUE, TRUE, format, var_args);
|
||||||
|
va_end (var_args);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
error (const gchar * format, ...)
|
||||||
|
{
|
||||||
|
va_list var_args;
|
||||||
|
|
||||||
|
va_start (var_args, format);
|
||||||
|
print (GST_DEBUG_FG_RED, TRUE, TRUE, format, var_args);
|
||||||
|
va_end (var_args);
|
||||||
|
}
|
||||||
|
|
||||||
|
gchar *
|
||||||
|
get_file_extension (gchar * uri)
|
||||||
|
{
|
||||||
|
size_t len;
|
||||||
|
gint find;
|
||||||
|
|
||||||
|
len = strlen (uri);
|
||||||
|
find = len - 1;
|
||||||
|
|
||||||
|
while (find >= 0) {
|
||||||
|
if (uri[find] == '.')
|
||||||
|
break;
|
||||||
|
find--;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (find <= 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return &uri[find + 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
static const gchar *
|
||||||
|
get_profile_type (GstEncodingProfile * profile)
|
||||||
|
{
|
||||||
|
if (GST_IS_ENCODING_CONTAINER_PROFILE (profile))
|
||||||
|
return "Container";
|
||||||
|
else if (GST_IS_ENCODING_AUDIO_PROFILE (profile))
|
||||||
|
return "Audio";
|
||||||
|
else if (GST_IS_ENCODING_VIDEO_PROFILE (profile))
|
||||||
|
return "Video";
|
||||||
|
else
|
||||||
|
return "Unkonwn";
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
print_profile (GstEncodingProfile * profile, const gchar * prefix)
|
||||||
|
{
|
||||||
|
const gchar *name = gst_encoding_profile_get_name (profile);
|
||||||
|
const gchar *desc = gst_encoding_profile_get_description (profile);
|
||||||
|
GstCaps *format = gst_encoding_profile_get_format (profile);
|
||||||
|
gchar *capsdesc;
|
||||||
|
|
||||||
|
if (gst_caps_is_fixed (format))
|
||||||
|
capsdesc = gst_pb_utils_get_codec_description (format);
|
||||||
|
else
|
||||||
|
capsdesc = gst_caps_to_string (format);
|
||||||
|
|
||||||
|
g_print ("%s%s: %s%s%s%s%s%s\n", prefix, get_profile_type (profile),
|
||||||
|
name ? name : capsdesc, desc ? ": " : "", desc ? desc : "",
|
||||||
|
name ? " (" : "", name ? capsdesc : "", name ? ")" : "");
|
||||||
|
|
||||||
|
gst_caps_unref (format);
|
||||||
|
|
||||||
|
g_free (capsdesc);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
describe_encoding_profile (GstEncodingProfile * profile)
|
||||||
|
{
|
||||||
|
g_return_if_fail (GST_IS_ENCODING_PROFILE (profile));
|
||||||
|
|
||||||
|
print_profile (profile, " ");
|
||||||
|
if (GST_IS_ENCODING_CONTAINER_PROFILE (profile)) {
|
||||||
|
const GList *tmp;
|
||||||
|
|
||||||
|
for (tmp =
|
||||||
|
gst_encoding_container_profile_get_profiles
|
||||||
|
(GST_ENCODING_CONTAINER_PROFILE (profile)); tmp; tmp = tmp->next)
|
||||||
|
print_profile (tmp->data, " - ");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
* Boston, MA 02110-1301, USA.
|
* Boston, MA 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <gst/pbutils/pbutils.h>
|
||||||
#include <gst/pbutils/encoding-profile.h>
|
#include <gst/pbutils/encoding-profile.h>
|
||||||
|
|
||||||
gchar * sanitize_timeline_description (int argc, char **argv);
|
gchar * sanitize_timeline_description (int argc, char **argv);
|
||||||
|
@ -24,3 +25,11 @@ gboolean get_flags_from_string (GType type, const gchar * str_flags, guint *val)
|
||||||
gchar * ensure_uri (const gchar * location);
|
gchar * ensure_uri (const gchar * location);
|
||||||
GstEncodingProfile * parse_encoding_profile (const gchar * format);
|
GstEncodingProfile * parse_encoding_profile (const gchar * format);
|
||||||
void print_enum (GType enum_type);
|
void print_enum (GType enum_type);
|
||||||
|
|
||||||
|
void print (GstDebugColorFlags c, gboolean err, gboolean nline, const gchar * format, va_list var_args);
|
||||||
|
void ok (const gchar * format, ...);
|
||||||
|
void warn (const gchar * format, ...);
|
||||||
|
void error (const gchar * format, ...);
|
||||||
|
|
||||||
|
gchar * get_file_extension (gchar * uri);
|
||||||
|
void describe_encoding_profile (GstEncodingProfile *profile);
|
Loading…
Reference in a new issue