diff options
Diffstat (limited to 'sys/applemedia/coremediabuffer.c')
-rw-r--r-- | sys/applemedia/coremediabuffer.c | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/sys/applemedia/coremediabuffer.c b/sys/applemedia/coremediabuffer.c index 1070da526..87e4cc349 100644 --- a/sys/applemedia/coremediabuffer.c +++ b/sys/applemedia/coremediabuffer.c @@ -152,18 +152,23 @@ gst_core_media_buffer_wrap_block_buffer (GstBuffer * buf, { OSStatus status; gchar *data = NULL; - UInt32 size; - - status = CMBlockBufferGetDataPointer (block_buf, 0, 0, 0, &data); - if (status != noErr) { - return FALSE; - } + size_t offset = 0, length_at_offset, total_length; + + /* CMBlockBuffer can contain multiple non-continuous memory blocks */ + do { + status = + CMBlockBufferGetDataPointer (block_buf, offset, &length_at_offset, + &total_length, &data); + if (status != kCMBlockBufferNoErr) { + return FALSE; + } - size = CMBlockBufferGetDataLength (block_buf); + gst_buffer_append_memory (buf, + gst_memory_new_wrapped (GST_MEMORY_FLAG_NO_SHARE, data, + length_at_offset, 0, length_at_offset, NULL, NULL)); - gst_buffer_append_memory (buf, - gst_memory_new_wrapped (GST_MEMORY_FLAG_NO_SHARE, data, - size, 0, size, NULL, NULL)); + offset += length_at_offset; + } while (offset < total_length); return TRUE; } |