{
GstCapsFeatures *feature = gst_caps_get_features (state->caps, 0);
- if (gst_caps_features_contains (feature, "memory:EGLImage")) {
- /* nothing special to do */
- g_print ("Prepare texture for EGLImage\n");
- state->can_avoid_upload = FALSE;
- glGenTextures (1, &state->tex);
- glBindTexture (GL_TEXTURE_2D, state->tex);
- } else if (gst_caps_features_contains (feature, "memory:GLMemory")) {
+ if (gst_caps_features_contains (feature, "memory:GLMemory")) {
g_print ("Prepare texture for GLMemory\n");
state->can_avoid_upload = TRUE;
state->tex = 0;
./testegl "filesrc location=big_buck_bunny_720p_h264.mov ! qtdemux ! \
h264parse ! omxh264dec ! glcolorscale ! \
- video/x-raw(memory:EGLImage) ! fakesink name=vsink"
-
- ./testegl "filesrc location=big_buck_bunny_720p_h264.mov ! qtdemux ! \
- h264parse ! omxh264dec ! glcolorscale ! \
video/x-raw(memory:GLMemory) ! fakesink name=vsink"
./testegl "filesrc location=big_buck_bunny_720p_h264.mov ! qtdemux ! \
#if defined (USE_OMX_TARGET_RPI) && defined (HAVE_GST_GL)
#include <gst/gl/gl.h>
-#include <gst/gl/egl/gsteglimagememory.h>
+#include <gst/gl/egl/gstglmemoryegl.h>
#endif
#if defined (USE_OMX_TARGET_RPI) && defined(__GNUC__)
klass->cdata.type = GST_OMX_COMPONENT_TYPE_FILTER;
klass->cdata.default_src_template_caps =
#if defined (USE_OMX_TARGET_RPI) && defined (HAVE_GST_GL)
- GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_EGL_IMAGE,
+ GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_GL_MEMORY,
"RGBA") "; "
#endif
"video/x-raw, "
gst_structure_free (config);
#if defined (USE_OMX_TARGET_RPI) && defined (HAVE_GST_GL)
- eglimage = self->eglimage && (allocator
- && g_strcmp0 (allocator->mem_type, GST_EGL_IMAGE_MEMORY_TYPE) == 0);
+ eglimage = self->eglimage
+ && (allocator && GST_IS_GL_MEMORY_EGL_ALLOCATOR (allocator));
#else
/* TODO: Implement something that works for other targets too */
eglimage = FALSE;
for (i = 0; i < min; i++) {
GstBuffer *buffer;
GstMemory *mem;
+ GstGLMemoryEGL *gl_mem;
if (gst_buffer_pool_acquire_buffer (pool, &buffer, ¶ms) != GST_FLOW_OK
|| gst_buffer_n_memory (buffer) != 1
|| !(mem = gst_buffer_peek_memory (buffer, 0))
- || g_strcmp0 (mem->allocator->mem_type,
- GST_EGL_IMAGE_MEMORY_TYPE) != 0) {
+ || !GST_IS_GL_MEMORY_EGL_ALLOCATOR (mem->allocator)) {
GST_INFO_OBJECT (self, "Failed to allocated %d-th EGLImage", i);
g_list_free_full (buffers, (GDestroyNotify) gst_buffer_unref);
g_list_free (images);
err = OMX_ErrorUndefined;
goto done;
}
-
+ gl_mem = (GstGLMemoryEGL *) mem;
buffers = g_list_append (buffers, buffer);
- gst_egl_image_memory_set_orientation (mem,
- GST_VIDEO_GL_TEXTURE_ORIENTATION_X_NORMAL_Y_FLIP);
- images = g_list_append (images, gst_egl_image_memory_get_image (mem));
+ /* FIXME: replace with the affine transformation meta */
+ gl_mem->image->orientation =
+ GST_VIDEO_GL_TEXTURE_ORIENTATION_X_NORMAL_Y_FLIP;
+ images = g_list_append (images, gst_gl_memory_egl_get_image (gl_mem));
if (egl_display == EGL_NO_DISPLAY)
- egl_display = gst_egl_image_memory_get_display (mem);
+ egl_display = gst_gl_memory_egl_get_display (gl_mem);
}
GST_DEBUG_OBJECT (self, "Allocated %d EGLImages successfully", min);
}
#if defined (USE_OMX_TARGET_RPI) && defined (HAVE_GST_GL)
err =
- gst_omx_port_deallocate_buffers (self->
- eglimage ? self->egl_out_port : self->dec_out_port);
+ gst_omx_port_deallocate_buffers (self->eglimage ? self->
+ egl_out_port : self->dec_out_port);
#else
err = gst_omx_port_deallocate_buffers (self->dec_out_port);
#endif
gst_caps_unref (state->caps);
state->caps = gst_video_info_to_caps (&state->info);
gst_caps_set_features (state->caps, 0,
- gst_caps_features_new (GST_CAPS_FEATURE_MEMORY_EGL_IMAGE, NULL));
+ gst_caps_features_new (GST_CAPS_FEATURE_MEMORY_GL_MEMORY, NULL));
/* try to negotiate with caps feature */
if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (self))) {
GST_DEBUG_OBJECT (self,
"Failed to negotiate with feature %s",
- GST_CAPS_FEATURE_MEMORY_EGL_IMAGE);
+ GST_CAPS_FEATURE_MEMORY_GL_MEMORY);
if (state->caps)
gst_caps_replace (&state->caps, NULL);
OMX_VIDEO_CodingUnused);
format =
- gst_omx_video_get_format_from_omx (port_def.format.
- video.eColorFormat);
+ gst_omx_video_get_format_from_omx (port_def.format.video.
+ eColorFormat);
if (format == GST_VIDEO_FORMAT_UNKNOWN) {
GST_ERROR_OBJECT (self, "Unsupported color format: %d",
gst_query_parse_nth_allocation_param (query, i, &allocator, ¶ms);
if (allocator) {
- if (g_strcmp0 (allocator->mem_type, GST_EGL_IMAGE_MEMORY_TYPE) == 0) {
+ if (GST_IS_GL_MEMORY_EGL_ALLOCATOR (allocator)) {
found = TRUE;
gst_query_set_nth_allocation_param (query, 0, allocator, ¶ms);
while (gst_query_get_n_allocation_params (query) > 1)
* and if allocator is not of type memory EGLImage then fails */
if (feature
&& gst_caps_features_contains (feature,
- GST_CAPS_FEATURE_MEMORY_EGL_IMAGE) && !found) {
+ GST_CAPS_FEATURE_MEMORY_GL_MEMORY) && !found) {
return FALSE;
}
}