I think that you may need to perform a gl clear in there, but I haven't seen the code.
On Oct 6, 2011, at 8:25 AM, Nisar Ahmed <[email protected]> wrote: > 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. > > https://skydrive.live.com/redir.aspx?cid=8f5664e00a55c1c5&resid=8F5664E00A55C1C5!104 > > Thanks > On Thu, Oct 6, 2011 at 1:25 AM, vade <[email protected]> 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, [email protected] 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 <[email protected]> >> Date: Wed, 05 Oct 2011 15:44:11 -0400 >> To: Nisar Ahmed<[email protected]> >> Cc: Christopher Wright<[email protected]>; quartzcomposer-dev >> list list<[email protected]> >> 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 >>> <[email protected]> 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 >>> [email protected] >>> >>> >>> <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 ([email protected]) >>> Help/Unsubscribe/Update your Subscription: >>> http://lists.apple.com/mailman/options/quartzcomposer-dev/doktorp%40mac.com >>> >>> This email sent to [email protected] >> >> _______________________________________________ >> Do not post admin requests to the list. They will be ignored. >> Quartzcomposer-dev mailing list ([email protected]) >> Help/Unsubscribe/Update your Subscription: >> http://lists.apple.com/mailman/options/quartzcomposer-dev/doktorp%40mac.com >> >> This email sent to [email protected] > > > _______________________________________________ > Do not post admin requests to the list. They will be ignored. > Quartzcomposer-dev mailing list ([email protected]) > Help/Unsubscribe/Update your Subscription: > http://lists.apple.com/mailman/options/quartzcomposer-dev/nisar.med%40gmail.com > > This email sent to [email protected] > > > _______________________________________________ > Do not post admin requests to the list. They will be ignored. > Quartzcomposer-dev mailing list ([email protected]) > Help/Unsubscribe/Update your Subscription: > http://lists.apple.com/mailman/options/quartzcomposer-dev/gtoledo3%40gmail.com > > This email sent to [email protected]
_______________________________________________ Do not post admin requests to the list. They will be ignored. Quartzcomposer-dev mailing list ([email protected]) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/quartzcomposer-dev/archive%40mail-archive.com This email sent to [email protected]

