mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-28 03:00:35 +00:00
avmux: Fix crash when muxer doesn't get codecid
gst_ffmpeg_formatid_get_codecids from gst_ffmpegmux_base_init to gst_ffmpegmux_base_init FFmpeg 7.0 included new muxer rcwt for Raw Captions with Time (RCWT). Commit [1]. GStreamer couldn't get sink caps for muxer it. Calling gst_ffmpeg_formatid_get_codecids in gst_ffmpegmux_register to avoid create muxer without pad templates. [1] https://github.com/FFmpeg/FFmpeg/commit/3525544e48 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7168>
This commit is contained in:
parent
13034cc63f
commit
3e4c8f1b16
3 changed files with 12 additions and 5 deletions
|
@ -3884,7 +3884,7 @@ gst_ffmpeg_formatid_to_caps (const gchar * format_name)
|
|||
gboolean
|
||||
gst_ffmpeg_formatid_get_codecids (const gchar * format_name,
|
||||
enum AVCodecID **video_codec_list, enum AVCodecID **audio_codec_list,
|
||||
AVOutputFormat * plugin)
|
||||
const AVOutputFormat * plugin)
|
||||
{
|
||||
static enum AVCodecID tmp_vlist[] = {
|
||||
AV_CODEC_ID_NONE,
|
||||
|
|
|
@ -123,7 +123,7 @@ gboolean
|
|||
gst_ffmpeg_formatid_get_codecids (const gchar *format_name,
|
||||
enum AVCodecID ** video_codec_list,
|
||||
enum AVCodecID ** audio_codec_list,
|
||||
AVOutputFormat * plugin);
|
||||
const AVOutputFormat * plugin);
|
||||
|
||||
#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 28, 100)
|
||||
gboolean
|
||||
|
|
|
@ -69,7 +69,7 @@ struct _GstFFMpegMuxClass
|
|||
{
|
||||
GstElementClass parent_class;
|
||||
|
||||
AVOutputFormat *in_plugin;
|
||||
const AVOutputFormat *in_plugin;
|
||||
};
|
||||
|
||||
#define GST_TYPE_FFMPEGMUX \
|
||||
|
@ -192,7 +192,7 @@ gst_ffmpegmux_base_init (gpointer g_class)
|
|||
GstFFMpegMuxClass *klass = (GstFFMpegMuxClass *) g_class;
|
||||
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
|
||||
GstPadTemplate *videosinktempl, *audiosinktempl, *srctempl;
|
||||
AVOutputFormat *in_plugin;
|
||||
const AVOutputFormat *in_plugin;
|
||||
GstCaps *srccaps, *audiosinkcaps, *videosinkcaps;
|
||||
enum AVCodecID *video_ids = NULL, *audio_ids = NULL;
|
||||
gchar *longname, *description, *name;
|
||||
|
@ -332,7 +332,7 @@ gst_ffmpegmux_init (GstFFMpegMux * ffmpegmux, GstFFMpegMuxClass * g_class)
|
|||
(GstCollectPadsFunction) gst_ffmpegmux_collected, ffmpegmux);
|
||||
|
||||
ffmpegmux->context = avformat_alloc_context ();
|
||||
ffmpegmux->context->oformat = oclass->in_plugin;
|
||||
ffmpegmux->context->oformat = (struct AVOutputFormat *) oclass->in_plugin;
|
||||
ffmpegmux->context->nb_streams = 0;
|
||||
ffmpegmux->opened = FALSE;
|
||||
|
||||
|
@ -872,6 +872,7 @@ gst_ffmpegmux_register (GstPlugin * plugin)
|
|||
GType type;
|
||||
const AVOutputFormat *in_plugin;
|
||||
void *i = 0;
|
||||
enum AVCodecID *video_ids = NULL, *audio_ids = NULL;
|
||||
|
||||
GST_LOG ("Registering muxers");
|
||||
|
||||
|
@ -925,6 +926,12 @@ gst_ffmpegmux_register (GstPlugin * plugin)
|
|||
}
|
||||
}
|
||||
|
||||
if (!gst_ffmpeg_formatid_get_codecids (in_plugin->name, &video_ids,
|
||||
&audio_ids, in_plugin)) {
|
||||
GST_LOG ("Ignoring muxer %s because no sink caps", in_plugin->name);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (gst_ffmpegmux_get_replacement (in_plugin->name))
|
||||
rank = GST_RANK_NONE;
|
||||
|
||||
|
|
Loading…
Reference in a new issue