static CMSampleBufferRef gst_vtdec_sample_buffer_from (GstVTDec * self, GstBuffer * buf) { GstCMApi *cm = self->ctx->cm; OSStatus status; CMBlockBufferRef bbuf = NULL; CMSampleBufferRef sbuf = NULL; GstMapInfo map; g_assert (self->fmt_desc != NULL); gst_buffer_map (buf, &map, GST_MAP_READ); status = cm->CMBlockBufferCreateWithMemoryBlock (NULL, map.data, (gint64) map.size, kCFAllocatorNull, NULL, 0, (gint64) map.size, FALSE, &bbuf); gst_buffer_unmap (buf, &map); if (status != noErr) goto error; status = cm->CMSampleBufferCreate (NULL, bbuf, TRUE, 0, 0, self->fmt_desc, 1, 0, NULL, 0, NULL, &sbuf); if (status != noErr) goto error; beach: cm->FigBlockBufferRelease (bbuf); return sbuf; error: GST_ERROR_OBJECT (self, "err %d", status); goto beach; }