All pastes #405541 Raw Edit

Miscellany

public c v1 · immutable
·published 2007-03-21 20:22 UTC
rendered paste body
static void decompressCb( void *decompressionTrackingRefCon,			  OSStatus result,			  ICMDecompressionTrackingFlags decompressionTrackingFlags,			  CVPixelBufferRef pixelBuffer,			  TimeValue64 displayTime,			  TimeValue64 displayDuration,			  ICMValidTimeFlags validTimeFlags,			  void *reserved,			  void *sourceFrameRefCon ){  MacOSXVideoDecoder * macosx;  GstBuffer *origbuf = (GstBuffer *) sourceFrameRefCon;  macosx = (MacOSXVideoDecoder *) decompressionTrackingRefCon;  GST_LOG_OBJECT (macosx, "result:%d, flags:0x%x, pixelBuffer:%p, displayTime:%lld, displayDuration:%lld",		  result, decompressionTrackingFlags, pixelBuffer, displayTime, displayDuration);  if (decompressionTrackingFlags & kICMDecompressionTracking_ReleaseSourceData) {    GST_LOG ("removing previous buffer : %p", origbuf);    gst_buffer_unref (origbuf);  }  if ((decompressionTrackingFlags & kICMDecompressionTracking_EmittingFrame) && pixelBuffer) {    gpointer addr;    GstBuffer *outbuf;    size_t size = CVPixelBufferGetDataSize(pixelBuffer);    /* allocate buffer */    macosx->lastret = gst_pad_alloc_buffer (macosx->srcpad, GST_BUFFER_OFFSET_NONE,					    size, GST_PAD_CAPS (macosx->srcpad),					    &outbuf);    if (G_UNLIKELY (macosx->lastret != GST_FLOW_OK)) {      GST_LOG ("gst_pad_alloc_buffer() returned %s", gst_flow_get_name (macosx->lastret));      goto beach;    }    CVPixelBufferRetain (pixelBuffer);    if (CVPixelBufferLockBaseAddress (pixelBuffer, 0))      GST_WARNING ("Couldn't lock base adress on pixel buffer !");    addr = CVPixelBufferGetBaseAddress(pixelBuffer);    /* copy data */    GST_LOG ("copying data in buffer");    g_memmove (GST_BUFFER_DATA (outbuf), addr, size);    GST_LOG ("Releasing pixelbuffer");    CVPixelBufferUnlockBaseAddress (pixelBuffer, 0);    CVPixelBufferRelease (pixelBuffer);    /* Set proper timestamp ! */    gst_buffer_set_caps (outbuf, GST_PAD_CAPS (macosx->srcpad));    GST_BUFFER_TIMESTAMP (outbuf) = displayTime;    GST_BUFFER_DURATION (outbuf) = displayDuration;    GST_BUFFER_SIZE (outbuf) = macosx->outsize;    /* push buffer */    GST_LOG ("Pushing buffer out !");    macosx->lastret = gst_pad_push (macosx->srcpad, outbuf);  } else {    macosx->lastret = GST_FLOW_OK;  } beach:  return;}