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]

Reply via email to