glclear did not help On Thu, Oct 6, 2011 at 6:49 PM, George Toledo <[email protected]> wrote:
> 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> > https://skydrive.live.com/redir.aspx?cid=8f5664e00a55c1c5&resid=8F5664E00A55C1C5!104 > > Thanks > On Thu, Oct 6, 2011 at 1:25 AM, vade < <[email protected]>[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]>[email protected]: >> >> 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]>[email protected]> >> *Date: *Wed, 05 Oct 2011 15:44:11 -0400 >> *To: *Nisar Ahmed< <[email protected]>[email protected]> >> *Cc: *Christopher Wright< <[email protected]> >> [email protected]>; quartzcomposer-dev list >> list<<[email protected]> >> [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]> >> [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]>[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]> >> [email protected]) >> Help/Unsubscribe/Update your Subscription: >> >> <http://lists.apple.com/mailman/options/quartzcomposer-dev/doktorp%40mac.com> >> http://lists.apple.com/mailman/options/quartzcomposer-dev/doktorp%40mac.com >> >> This email sent to <[email protected]>[email protected] >> >> >> _______________________________________________ >> Do not post admin requests to the list. They will be ignored. >> Quartzcomposer-dev mailing list (<[email protected]> >> [email protected]) >> Help/Unsubscribe/Update your Subscription: >> >> <http://lists.apple.com/mailman/options/quartzcomposer-dev/doktorp%40mac.com> >> http://lists.apple.com/mailman/options/quartzcomposer-dev/doktorp%40mac.com >> >> This email sent to <[email protected]>[email protected] >> >> >> >> _______________________________________________ >> Do not post admin requests to the list. They will be ignored. >> Quartzcomposer-dev mailing list (<[email protected]> >> [email protected]) >> Help/Unsubscribe/Update your Subscription: >> <http://lists.apple.com/mailman/options/quartzcomposer-dev/nisar.med%40gmail.com> >> http://lists.apple.com/mailman/options/quartzcomposer-dev/nisar.med%40gmail.com >> >> This email sent to <[email protected]>[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]>[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]

