I have tried it but with little success. The code can render memory buffer into OpenGL context but I can only see garbage on the output. I think it is color conversion issue. I am sharing the link to code for your review.
Thanks On Thu, Oct 6, 2011 at 1:25 AM, vade <dokt...@mac.com> wrote: > You are right about the 2vuy format not being appropriate for direct > output, however, you can work around that. > > If you implement a custom QCOutputImageProvider , you can use the > > - (BOOL) renderWithCGLContext:(CGLContextObj)cgl_ctx > forBounds:(NSRect)bounds > > What I do in my decklink code is > > get the IDeckLinkVideoinputImage from the callback, make a CVPixelbufferRef > out of it with CVPixelBufferCreateWithBytes and then I make a > CVOpenGLTextureRef out of it with CVOpenGLTextureCacheCreateWithImage. > > If you init the CVOpenGLTextureCache with the same context as the > QCPlugin's, the textures created will be valid. The output texture can then > be rendered to OpenGL, "fast path", as CV will take care of sorting out the > 2vuy format conversions to a proper texture (using either a shader, or via > the appropriate texture extensions). > > Now, you simply draw that CVOpenGLTextureRef when the above function is > called on your QCOutputImageProvider, which is as I understand it, is > rendered to an FBO with the appropriate format. So you would support > QCPluginPIxelFormat BGRA and ARGB, because you are rendering out to that, > but internally you are 2vuy. > > Basically. > > Init a: > > CVopenGLTextureCache with an appropriate CGLContextObj from your QCPlugin > Context > > when you get a new frame > > IDeckLinkVideoInputFrame->CVPIxelBufferRef (via > CVCReatePIxelBufferWithBytes) -> CVOpenGLTextureRef (via > CVOpenGLTextureCacheCreateWithImage ) > > When you get the renderWithCGLContext: draw the texture. > > Done! > > Just be sure to appropriately call CVOpenGLTextureCacheFlush every now and > then. > > > Additionally, you *can* specify format conversions via CV, but I have found > that they are slow. :).The only gotcha with this approach is you are > providing *only* a texture, not handing off a CVPixelBuffer,Ref which, > should the next patch inline from your provider request, would be > suboptimal. If you could provide a pixel buffer, QC would handle uploading a > texture for you, should the next patch request it, if the next patch > requests a pixel buffer, it just hands off the one you provide. However, if > you hand off a *texture, *and the next patch requests a pixel buffer, QC > has to download to main memory, and hand off the pixel buffer, which is > slower. But, really, no one should be using pixel buffers anymore, unless > you have a *really* good reason like OpenCV processing or something. :P > > Tom Butterworth has some nice custom image provider classes that can output > a PixelBufferRef or a OpenGLTexture depending on what is requested. To be > honest, I've not looked into how he managed that or what the magic > combination of advertised features are, but should you really need/want to > optimize that stage, it is possible. I actually think the v002 movie player > has that code come to think of it. > > Hope that helps. Good luck! > > On Oct 5, 2011, at 3:55 PM, nisar....@gmail.com wrote: > > You guessed it right and my first approach was to develop a provider but QC > was raising an exception whenever it called the outputImageProvider... > function. I got overwhelmed and decided to choose an easier approach, but > yes you are right I should follow the right approach. > > Another reason for switching to consumer was the input image pixel format > which is 2yuv... (from decklink) and the QCPlugin supports RGBA type formats > and I don't have a clue how to make the conversion. > > I also saw your movieloader patch and its code which can be a great help so > will try again tomorrow. > > Thanks > Nisar > > *** This Message Has Been Sent Using BlackBerry Internet Service from > Mobilink *** > ------------------------------ > *From: * vade <dokt...@me.com> > *Date: *Wed, 05 Oct 2011 15:44:11 -0400 > *To: *Nisar Ahmed<nisar....@gmail.com> > *Cc: *Christopher Wright<christopher_wri...@apple.com>; quartzcomposer-dev > list list<quartzcomposer-dev@lists.apple.com> > *Subject: *Re: Drawing inside QC Plugin using CIContext > > It looks like you are outputting an image from a decklink card (I am > assuming this is going to be for a digitizer / video input replacement?) > > Assuming my assumption is correct, why not output the CVPIxelBufferRef ? It > looks like you create one from the decklink IDeckLinkVideoInputFrame > handler in your decklink callback, and make the patch be a provider, rather > than a consumer and use the factory method > > outputImageProviderFromBufferWithPixelFormat:pixelsWide:pixelsHigh:baseAddress:bytesPerRow:releaseCallback:releaseContext:colorSpace:shouldColorMatch, > or a custom QCPLuginOutputImageProvider class you implement and just output > an image :) > > QC will handle everything else you need and you can additionally use image > filters, CI Filters and GLSL shaders on your output image. > > > > > On Oct 5, 2011, at 12:08 PM, Nisar Ahmed wrote: > > Yes you are correct, I added this and it worked but..... > > //Creating image from a CVImageBufferRef > (Format=PAL) > image = [[CIImage alloc] initWithCVImageBuffer:pixelBuffer]; > > //Resizing width and height of image to match input port's > width and height > width = [image extent].size.width*(self.inputWidth/2.0); > height = [image extent].size.height*(self.inputHeight/2.0); > glViewport(self.inputX, self.inputY, width, height); > glMatrixMode(GL_MODELVIEW); > glLoadIdentity(); > glMatrixMode(GL_PROJECTION); > glLoadIdentity(); > glOrtho(0, width, 0, height, -1.0, 1.0); > [ciContext drawImage:image inRect:CGRectMake(0, 0, width, height) > fromRect:[image extent]]; > > Now I can see correct image inside. BUT the whole of QC View background is > painted in White and it's no more transparent like in other consumer > patches. The image in question is in PAL format. > > I have also attached a screen shot for reference > > Thank you > Nisar > > > > On Wed, Oct 5, 2011 at 8:27 PM, Christopher Wright < > christopher_wri...@apple.com> wrote: > >> Now I am a little confused about inRect and fromRect parameters of >> drawImage since the coordinate system is different and which OpenGL function >> should I include or remove from this function for it to work. >> >> I can only see a blank screen on top right corner of QC View >> >> >> You'll probably want to change the Projection matrix, since QC will have >> it set to something you probably aren't interested in. >> >> -- >> Christopher Wright >> christopher_wri...@apple.com >> >> > <Screen shot 2011-10-05 at 9.07.16 > PM.png>_______________________________________________ > Do not post admin requests to the list. They will be ignored. > Quartzcomposer-dev mailing list (Quartzcomposer-dev@lists.apple.com) > Help/Unsubscribe/Update your Subscription: > http://lists.apple.com/mailman/options/quartzcomposer-dev/doktorp%40mac.com > > This email sent to dokt...@mac.com > > > _______________________________________________ > Do not post admin requests to the list. They will be ignored. > Quartzcomposer-dev mailing list (Quartzcomposer-dev@lists.apple.com) > Help/Unsubscribe/Update your Subscription: > http://lists.apple.com/mailman/options/quartzcomposer-dev/doktorp%40mac.com > > This email sent to dokt...@mac.com > > > > _______________________________________________ > Do not post admin requests to the list. They will be ignored. > Quartzcomposer-dev mailing list (Quartzcomposer-dev@lists.apple.com) > Help/Unsubscribe/Update your Subscription: > > http://lists.apple.com/mailman/options/quartzcomposer-dev/nisar.med%40gmail.com > > This email sent to nisar....@gmail.com > >
_______________________________________________ Do not post admin requests to the list. They will be ignored. Quartzcomposer-dev mailing list (Quartzcomposer-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/quartzcomposer-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com