summaryrefslogtreecommitdiff
path: root/gst-decoder.c
diff options
context:
space:
mode:
authorCarlos Rafael Giani <dv@pseudoterminal.org>2017-04-26 20:56:19 +0200
committerRob Clark <robdclark@gmail.com>2017-04-29 10:23:41 -0400
commitbf80ca5ffb7fee1df0d42c80b9d74e691eb64cde (patch)
tree4039ce62683472bb73bf48c06166efbb6ce3794f /gst-decoder.c
parent86f0ab9f8bd0f4e203ea6e6acfc7861554cdeabd (diff)
downloadkmscube-bf80ca5ffb7fee1df0d42c80b9d74e691eb64cde.tar.gz
gst-decoder.c: minor cleanup
Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
Diffstat (limited to 'gst-decoder.c')
-rw-r--r--gst-decoder.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/gst-decoder.c b/gst-decoder.c
index d1cb18c..768aa1b 100644
--- a/gst-decoder.c
+++ b/gst-decoder.c
@@ -42,6 +42,8 @@
GST_DEBUG_CATEGORY_EXTERN(kmscube_debug);
#define GST_CAT_DEFAULT kmscube_debug
+#define MAX_NUM_PLANES 3
+
struct decoder {
GMainLoop *loop;
GstElement *pipeline;
@@ -83,7 +85,7 @@ pad_probe(GstPad *pad, GstPadProbeInfo *info, gpointer user_data)
return GST_PAD_PROBE_OK;
}
- switch (dec->info.finfo->format) {
+ switch (GST_VIDEO_INFO_FORMAT(&(dec->info))) {
case GST_VIDEO_FORMAT_I420:
dec->format = DRM_FORMAT_YUV420;
break;
@@ -264,7 +266,7 @@ video_init(const struct egl *egl, const struct gbm *gbm, const char *filename)
GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM,
pad_probe, dec, NULL);
- /* hack to make sure we get dmabuf's from v4l2video0dec.. */
+ /* callback needed to make sure we get dmabuf's from v4l2videoNdec.. */
decodebin = gst_bin_get_by_name(GST_BIN(dec->pipeline), "decode");
g_signal_connect(decodebin, "element-added", G_CALLBACK(element_added_cb), dec);
@@ -322,7 +324,7 @@ buf_to_fd(const struct gbm *gbm, int size, void *ptr)
static EGLImage
buffer_to_image(struct decoder *dec, GstBuffer *buf)
{
- struct { int fd, offset, stride; } planes[3];
+ struct { int fd, offset, stride; } planes[MAX_NUM_PLANES];
GstVideoMeta *meta = gst_buffer_get_video_meta(buf);
EGLImage image;
unsigned nmems = gst_buffer_n_memory(buf);
@@ -412,6 +414,7 @@ buffer_to_image(struct decoder *dec, GstBuffer *buf)
EGL_LINUX_DMA_BUF_EXT, NULL, attr);
}
+ /* Cleanup */
for (unsigned i = 0; i < nmems; i++)
close(planes[i].fd);
@@ -426,8 +429,10 @@ video_frame(struct decoder *dec)
EGLImage frame = NULL;
samp = gst_app_sink_pull_sample(GST_APP_SINK(dec->sink));
- if (!samp)
+ if (!samp) {
+ GST_DEBUG("got no appsink sample");
return NULL;
+ }
buf = gst_sample_get_buffer(samp);