2012-03-03 12 views
8

मैंने Google और stackoverflow की कोशिश की लेकिन मुझे CVOpenGLESTexture से शुरू होने वाले कार्यों के लिए आधिकारिक दस्तावेज़ीकरण नहीं मिल रहा है। मैं देख सकता हूं कि वे कोर वीडियो से हैं, और मुझे पता है कि उन्हें आईओएस 5 पर जोड़ा गया था लेकिन दस्तावेज खोजना मुझे कुछ भी नहीं देता है।CVOpenGLESTexture विधि प्रकारों के लिए आधिकारिक दस्तावेज़ीकरण कहां है?

मैं पैरामीटर के बारे में जानकारी, वे क्या करते हैं, उन्हें कैसे उपयोग करें आदि जैसे अन्य सेब ढांचे में जानकारी की तलाश में हूं।

अब तक मैं यह कर सकता हूं कि जानकारी देखने के लिए कमांड पर क्लिक करें लेकिन यह बहुत अजीब लगता है। या क्या इसे जोड़ने का कोई तरीका है ताकि इसे एक्सकोड पर दाईं ओर त्वरित सहायता पर प्रदर्शित किया जा सके?

धन्यवाद और क्षमा करें अगर यह एक बेवकूफ सवाल है।

पीडी: कोर वीडियो संदर्भ मार्गदर्शिका इन दोनों को समझाती प्रतीत नहीं होती है।

उत्तर

15

दुर्भाग्यवश, वास्तव में, इन नए कार्यों पर कोई दस्तावेज़ीकरण नहीं है।

/*! 
    @function CVOpenGLESTextureCacheCreate 
    @abstract Creates a new Texture Cache. 
    @param  allocator The CFAllocatorRef to use for allocating the cache. May be NULL. 
    @param  cacheAttributes A CFDictionaryRef containing the attributes of the cache itself. May be NULL. 
    @param  eaglContext The OpenGLES 2.0 context into which the texture objects will be created. OpenGLES 1.x contexts are not supported. 
    @param  textureAttributes A CFDictionaryRef containing the attributes to be used for creating the CVOpenGLESTexture objects. May be NULL. 
    @param  cacheOut The newly created texture cache will be placed here 
    @result  Returns kCVReturnSuccess on success 
*/ 
CV_EXPORT CVReturn CVOpenGLESTextureCacheCreate(
        CFAllocatorRef allocator, 
        CFDictionaryRef cacheAttributes, 
        void *eaglContext, 
        CFDictionaryRef textureAttributes, 
        CVOpenGLESTextureCacheRef *cacheOut) __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0); 

अधिक कठिन तत्वों गुण शब्दकोशों कर रहे हैं, जो दुर्भाग्य से आप की जरूरत: सबसे अच्छा आप पा लिए जा रहे हैं अभी CVOpenGLESTextureCache.h हेडर फाइल है, जहां आप समारोह मानकों का एक बुनियादी विवरण देखेंगे में है इन कार्यों का सही ढंग से उपयोग करने के लिए उदाहरण ढूंढने के लिए। ऐप्पल में GLCameraRipple और RosyWriter उदाहरण हैं जो दिखाते हैं कि बीजीआरए और वाईयूवी इनपुट रंग प्रारूपों के साथ तेज़ बनावट अपलोड पथ का उपयोग कैसे करें। ऐप्पल ने डब्ल्यूडब्ल्यूडीसी (जो अभी भी वीडियो के साथ सुलभ हो सकता है) में क्रोमाकी उदाहरण प्रदान किया है, जो दिखाता है कि ओपनजीएल ईएस बनावट से जानकारी खींचने के लिए इन बनावट कैश का उपयोग कैसे किया जाए।

मुझे बस यह GPUImage फ्रेमवर्क (उस स्रोत कोड के लिए उपलब्ध है जो उस लिंक पर उपलब्ध है) में काम कर रहा है, इसलिए मैं यह बताऊंगा कि मैं इससे क्या पालने में सक्षम था। सबसे पहले, मैं एक बनावट कैश निम्नलिखित कोड का उपयोग कर बनाने के लिए:

CVReturn err = CVOpenGLESTextureCacheCreate(kCFAllocatorDefault, NULL, (__bridge void *)[[GPUImageOpenGLESContext sharedImageProcessingOpenGLESContext] context], NULL, &coreVideoTextureCache); 
if (err) 
{ 
    NSAssert(NO, @"Error at CVOpenGLESTextureCacheCreate %d"); 
} 

जहां संदर्भ के लिए भेजा एक EAGLContext ओपन ES 2.0 के लिए कॉन्फ़िगर है।

मैं इस का उपयोग वीडियो स्मृति में IOS डिवाइस कैमरे से वीडियो फ्रेम रखने के लिए, और मैं निम्नलिखित कोड का उपयोग करते हैं:

CVPixelBufferLockBaseAddress(cameraFrame, 0); 

CVOpenGLESTextureRef texture = NULL; 
CVReturn err = CVOpenGLESTextureCacheCreateTextureFromImage(kCFAllocatorDefault, coreVideoTextureCache, cameraFrame, NULL, GL_TEXTURE_2D, GL_RGBA, bufferWidth, bufferHeight, GL_BGRA, GL_UNSIGNED_BYTE, 0, &texture); 

if (!texture || err) { 
    NSLog(@"CVOpenGLESTextureCacheCreateTextureFromImage failed (error: %d)", err); 
    return; 
} 

outputTexture = CVOpenGLESTextureGetName(texture); 
glBindTexture(GL_TEXTURE_2D, outputTexture); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 

// Do processing work on the texture data here 

CVPixelBufferUnlockBaseAddress(cameraFrame, 0); 

CVOpenGLESTextureCacheFlush(coreVideoTextureCache, 0); 
CFRelease(texture); 
outputTexture = 0; 

यह एक नया CVOpenGLESTextureRef, एक OpenGL ES बनावट का प्रतिनिधित्व करता है, से बनावट कैश। यह बनावट कैमरे द्वारा पारित CVImageBufferRef पर आधारित है। उस बनावट को तब CVOpenGLESTextureRef से पुनर्प्राप्त किया जाता है और इसके लिए निर्धारित उचित पैरामीटर (जो मेरी प्रसंस्करण में आवश्यक प्रतीत होता है)। अंत में, मैं बनावट पर अपना काम करता हूं और जब मैं कर रहा हूं तो साफ़ कर देता हूं।

यह तेज़ अपलोड प्रक्रिया आईओएस उपकरणों पर एक वास्तविक अंतर बनाती है। आईफोन 4 एस पर 9.0 एमएस से 1.8 एमएस तक एक 640x480 फ्रेम वीडियो के अपलोड और प्रसंस्करण को लिया गया।

मेरे पास heard that this works in reverse है, साथ ही, कुछ स्थितियों में glReadPixels() के प्रतिस्थापन के लिए अनुमति दे सकता है, लेकिन मैंने अभी तक इसे आजमाया है।

+0

यह वास्तव में एक शर्म की बात है कि छवि प्रसंस्करण के लिए ऐसा एक प्रभावी तरीका बहुत अच्छी तरह से प्रलेखित नहीं है।लेकिन आपके जैसे लोगों के लिए धन्यवाद कम अनुभव डेवलपर्स इसका भी उपयोग करने का प्रयास कर सकते हैं। – Pochi

+0

क्या आप फोटो प्रीसेट के लिए काम कर रहे बनावट कैश प्राप्त करने में सक्षम थे? मुझे 'CVOpenGLESTextureCacheCreate' – Dex

+0

@Dex - हाँ के लिए 'CFDictionaryRef कैश एट्रिब्यूट्स' पर कहीं भी कोई जानकारी नहीं मिली, हां, यह उसी फ़ोटो के साथ फोटो प्रीसेट के लिए काम करता है जैसा मैंने वीडियो फ्रेम के लिए उपयोग किया है। मेरे द्वारा उपयोग किए गए विकल्पों के साथ कोड के लिए मेरे उपरोक्त लिंकवर्क देखें। एक चेतावनी यह है कि आईफोन 4 पर, कैमरा उस डिवाइस पर अधिकतम बनावट आकार की तुलना में बड़े फ्रेम को कैप्चर कर सकता है। इन तस्वीरों को सीधे बनावट के रूप में संसाधित नहीं किया जा सकता है, इसलिए उनके साथ निपटने के लिए कुछ प्रकार की टाइलिंग की आवश्यकता होगी। मैं उस पर काम कर रहा हूँ। –

2

ऐप्पल ने आखिरकार एक सप्ताह पहले थोड़ा सा documentation पोस्ट किया था।

+1

यह दस्तावेज़ीकरण नहीं है। ऐप्पल में कोई व्यक्ति विधि नाम कॉपी/पेस्ट कर रहा है, और ऊंट-केस शब्दों के बीच रिक्त स्थान जोड़ रहा है। हेडर स्रोत-कोड टिप्पणियां वास्तव में इस से अधिक उपयोगी हैं, आईएमई - उनके पास अधिक जानकारी है! – Adam

संबंधित मुद्दे