summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: e8a4faf)
raw | patch | inline | side by side (parent: e8a4faf)
author | Alessandro Decina <alessandro.decina@collabora.co.uk> | |
Thu, 22 Mar 2012 14:41:11 +0000 (15:41 +0100) | ||
committer | Alessandro Decina <alessandro.decina@collabora.co.uk> | |
Thu, 22 Mar 2012 15:19:22 +0000 (16:19 +0100) |
src/gstducatividenc.c | patch | blob | history |
diff --git a/src/gstducatividenc.c b/src/gstducatividenc.c
index 84c0897e129b0c3bf9f690b8dbbac08aed1921a5..d658be69943d84c676c1766580b7e4b90b0f1421 100644 (file)
--- a/src/gstducatividenc.c
+++ b/src/gstducatividenc.c
guint8 *y_vaddr, *uv_vaddr;
SSPtr y_paddr, uv_paddr, outbuf_paddr;
XDAS_Int32 err;
+ XDAS_Int16 y_type, uv_type;
const GstVideoState *state;
int i;
}
}
- inbuf = GST_BUFFER (gst_ducati_bufferpool_get (self->input_pool, NULL));
- memcpy (GST_BUFFER_DATA (inbuf), GST_BUFFER_DATA (frame->sink_buffer),
- GST_BUFFER_SIZE (frame->sink_buffer));
+ inbuf = gst_buffer_ref (frame->sink_buffer);
+have_inbuf:
+ y_vaddr = GST_BUFFER_DATA (inbuf);
+ uv_vaddr = y_vaddr + gst_video_format_get_component_offset (state->format,
+ 1, state->width, state->height);
+ y_paddr = TilerMem_VirtToPhys (y_vaddr);
+ uv_paddr = TilerMem_VirtToPhys (uv_vaddr);
+ y_type = gst_ducati_get_mem_type (y_paddr);
+ uv_type = gst_ducati_get_mem_type (uv_paddr);
+ if (y_type < 0 || uv_type < 0) {
+ GST_DEBUG_OBJECT (self, "memcpying input %d %d", y_type, uv_type);
+ gst_buffer_unref (inbuf);
+ inbuf = GST_BUFFER (gst_ducati_bufferpool_get (self->input_pool, NULL));
+ memcpy (GST_BUFFER_DATA (inbuf), GST_BUFFER_DATA (frame->sink_buffer),
+ GST_BUFFER_SIZE (frame->sink_buffer));
+ goto have_inbuf;
+ }
+
outbuf = GST_BUFFER (gst_ducati_bufferpool_get (self->output_pool, NULL));
y_vaddr = GST_BUFFER_DATA (inbuf);