30
30
#include <gst/vaapi/gstvaapisurfacepool.h>
32
32
#include "gstvaapiuploader.h"
33
#include "gstvaapipluginutil.h"
33
34
#include "gstvaapivideobuffer.h"
35
36
#define GST_HELPER_NAME "vaapiupload"
113
114
GstVaapiUploaderPrivate * const priv = uploader->priv;
114
115
GstVaapiSurface *surface = NULL;
115
GstCaps *out_caps, *image_caps = NULL;
116
guint i, n_structures;
116
GArray *formats = NULL, *out_formats = NULL;
117
119
gboolean success = FALSE;
119
121
enum { WIDTH = 64, HEIGHT = 64 };
121
123
if (priv->allowed_caps)
124
out_caps = gst_caps_new_empty();
126
formats = gst_vaapi_display_get_image_formats(priv->display);
128
image_caps = gst_vaapi_display_get_image_caps(priv->display);
130
out_formats = g_array_sized_new(FALSE, FALSE, sizeof(GstVideoFormat),
132
135
surface = gst_vaapi_surface_new(priv->display,
133
136
GST_VAAPI_CHROMA_TYPE_YUV420, WIDTH, HEIGHT);
137
n_structures = gst_caps_get_size(image_caps);
138
for (i = 0; i < n_structures; i++) {
139
GstStructure * const structure = gst_caps_get_structure(image_caps, i);
140
for (i = 0; i < formats->len; i++) {
141
const GstVideoFormat format =
142
g_array_index(formats, GstVideoFormat, i);
140
143
GstVaapiImage *image;
141
GstVideoFormat format;
143
format = gst_vaapi_video_format_from_structure(structure);
144
145
if (format == GST_VIDEO_FORMAT_UNKNOWN)
146
147
image = gst_vaapi_image_new(priv->display, format, WIDTH, HEIGHT);
149
150
if (ensure_image(image) && gst_vaapi_surface_put_image(surface, image))
150
gst_caps_append_structure(out_caps, gst_structure_copy(structure));
151
g_array_append_val(out_formats, format);
151
152
gst_vaapi_object_unref(image);
155
out_caps = gst_vaapi_video_format_new_template_caps_from_list(out_formats);
154
159
gst_caps_replace(&priv->allowed_caps, out_caps);
160
gst_caps_unref(out_caps);
158
gst_caps_unref(out_caps);
160
gst_caps_unref(image_caps);
165
g_array_unref(out_formats);
167
g_array_unref(formats);
162
169
gst_vaapi_object_unref(surface);