diff options
author | Arun Raghavan <arun@arunraghavan.net> | 2017-03-20 22:19:47 +0530 |
---|---|---|
committer | Arun Raghavan <arun@arunraghavan.net> | 2017-03-21 09:49:45 +0530 |
commit | 2e25f166fcfbc704d3ad400cde7bc3c75662f4b9 (patch) | |
tree | ab2025771488ade877be964f0ff18896aa2aa2a7 | |
parent | fecf973bc9bd4394b2640e65ee18bde5f1b09c71 (diff) | |
download | gst-libav-2e25f166fcfbc704d3ad400cde7bc3c75662f4b9.tar.gz |
avvidenc: Classify image encoders with "Image" instead of "Video"
This allows gst_video_convert_sample*() to work with codecs for which we
have libav encoders (such as BMP).
https://bugzilla.gnome.org/show_bug.cgi?id=780317
-rw-r--r-- | ext/libav/gstavcodecmap.c | 24 | ||||
-rw-r--r-- | ext/libav/gstavcodecmap.h | 6 | ||||
-rw-r--r-- | ext/libav/gstavvidenc.c | 6 |
3 files changed, 35 insertions, 1 deletions
diff --git a/ext/libav/gstavcodecmap.c b/ext/libav/gstavcodecmap.c index f6da86f..35a2ca0 100644 --- a/ext/libav/gstavcodecmap.c +++ b/ext/libav/gstavcodecmap.c @@ -721,6 +721,30 @@ gst_ff_aud_caps_new (AVCodecContext * context, AVCodec * codec, return caps; } +/* Check if the given codec ID is an image format -- for now this is just + * anything whose caps is image/... */ +gboolean +gst_ffmpeg_codecid_is_image (enum AVCodecID codec_id) +{ + switch (codec_id) { + case AV_CODEC_ID_MJPEG: + case AV_CODEC_ID_LJPEG: + case AV_CODEC_ID_GIF: + case AV_CODEC_ID_PPM: + case AV_CODEC_ID_PBM: + case AV_CODEC_ID_PCX: + case AV_CODEC_ID_SGI: + case AV_CODEC_ID_TARGA: + case AV_CODEC_ID_TIFF: + case AV_CODEC_ID_SUNRAST: + case AV_CODEC_ID_BMP: + return TRUE; + + default: + return FALSE; + } +} + /* Convert a FFMPEG codec ID and optional AVCodecContext * to a GstCaps. If the context is ommitted, no fixed values * for video/audio size will be included in the GstCaps diff --git a/ext/libav/gstavcodecmap.h b/ext/libav/gstavcodecmap.h index 486a0d5..9575e77 100644 --- a/ext/libav/gstavcodecmap.h +++ b/ext/libav/gstavcodecmap.h @@ -68,6 +68,12 @@ gst_ffmpeg_compliance_get_type (void); #define FFMPEG_DEFAULT_COMPLIANCE GST_FFMPEG_NORMAL /* + * _codecid_is_image() returns TRUE for image formats + */ +gboolean +gst_ffmpeg_codecid_is_image (enum AVCodecID codec_id); + +/* * _codecid_to_caps () gets the GstCaps that belongs to * a certain CodecID for a pad with compressed data. */ diff --git a/ext/libav/gstavvidenc.c b/ext/libav/gstavvidenc.c index f241ec3..7f28dfb 100644 --- a/ext/libav/gstavvidenc.c +++ b/ext/libav/gstavvidenc.c @@ -126,6 +126,7 @@ gst_ffmpegvidenc_base_init (GstFFMpegVidEncClass * klass) GstPadTemplate *srctempl = NULL, *sinktempl = NULL; GstCaps *srccaps = NULL, *sinkcaps = NULL; gchar *longname, *description; + const gchar *klass; in_plugin = (AVCodec *) g_type_get_qdata (G_OBJECT_CLASS_TYPE (klass), @@ -135,8 +136,11 @@ gst_ffmpegvidenc_base_init (GstFFMpegVidEncClass * klass) /* construct the element details struct */ longname = g_strdup_printf ("libav %s encoder", in_plugin->long_name); description = g_strdup_printf ("libav %s encoder", in_plugin->name); + klass = + gst_ffmpeg_codecid_is_image (in_plugin->id) ? "Codec/Encoder/Image" : + "Codec/Encoder/Video"; gst_element_class_set_metadata (element_class, longname, - "Codec/Encoder/Video", description, + klass, description, "Wim Taymans <wim.taymans@gmail.com>, " "Ronald Bultje <rbultje@ronald.bitfreak.net>"); g_free (longname); |