पहला - मैं कुछ समय से इस पर काम कर रहा हूं और कई समाधानों की कोशिश की है, इसलिए मुझे Google पर मिलने वाला पहला लिंक न भेजें।एंड्रॉइड: कॉलबैक के साथ कैमरा पूर्वावलोकन कैसे प्रदर्शित करें?
मुझे जो करना है वह काफी सरल है, मैं कैमरे के कॉलबैक का उपयोग कर कैमरे से पूर्वावलोकन मैन्युअल रूप से प्रदर्शित करना चाहता हूं और मैं एक वास्तविक डिवाइस पर कम से कम 15fps प्राप्त करना चाहता हूं। मुझे रंगों की भी आवश्यकता नहीं है, मुझे बस ग्रेस्केल छवि का पूर्वावलोकन करने की आवश्यकता है। कैमरे की छवियां वाईयूवी प्रारूप में हैं और आपको इसे किसी भी तरह से संसाधित करना है, जो मुख्य प्रदर्शन समस्या है। मैं एपीआई 8.
सभी मामलों में मैं कैमरे का उपयोग कर रहा हूं .setPreviewCallbackWithBuffer(), जो कैमरा से अधिक तेज है .setPreviewCallback()। ऐसा लगता है कि अगर मैं पूर्वावलोकन प्रदर्शित नहीं कर रहा हूं, तो मुझे यहां 24 एफपीएस नहीं मिल सकते हैं। तो समस्या नहीं है। एक बिटमैप के रूप में एक SurfaceView पर
1. प्रदर्शन कैमरा पूर्वावलोकन:
मैं इन समाधानों की कोशिश की है। यह काम करता है, लेकिन प्रदर्शन लगभग 6fps है।
baos = new ByteOutputStream();
yuvimage=new YuvImage(cameraFrame, ImageFormat.NV21, prevX, prevY, null);
yuvimage.compressToJpeg(new Rect(0, 0, prevX, prevY), 80, baos);
jdata = baos.toByteArray();
bmp = BitmapFactory.decodeByteArray(jdata, 0, jdata.length); // Convert to Bitmap, this is the main issue, it takes a lot of time
canvas.drawBitmap(bmp , 0, 0, paint);
एक बनावट के रूप में एक GLSurfaceView पर
2. प्रदर्शन कैमरा पूर्वावलोकन। यहां मैं केवल ल्यूमिनेंस डेटा (ग्रेस्केल छवि) प्रदर्शित कर रहा था, जो काफी आसान है, इसे प्रत्येक फ्रेम पर केवल एक एरेकॉपी() की आवश्यकता होती है। मुझे लगभग 12 एफपीएस मिल सकते हैं, लेकिन मुझे पूर्वावलोकन में कुछ फ़िल्टर लागू करने की आवश्यकता है और ऐसा लगता है कि इसे ओपनजीएल ईएस 1 में तेजी से नहीं किया जा सकता है। इसलिए मैं इस समाधान का उपयोग नहीं कर सकता। another question में इसका कुछ विवरण।
3. एक (जीएल) SurfaceView YUV डेटा की प्रक्रिया करने के लिए NDK के प्रयोग पर प्रदर्शन कैमरा पूर्वावलोकन। मुझे एक समाधान here मिलता है जो कुछ सी फ़ंक्शन और एनडीके का उपयोग करता है। लेकिन मैंने इसे इस्तेमाल करने का प्रबंधन नहीं किया, here some more details। लेकिन वैसे भी, यह समाधान बाइटबफर को ओपनजीएल में एक बनावट के रूप में प्रदर्शित करने के लिए किया जाता है और यह पिछले प्रयास की तुलना में तेज़ नहीं होगा। तो मुझे int [] सरणी वापस करने के लिए इसे संशोधित करना होगा, जिसे canvas.drawBitmap() के साथ खींचा जा सकता है, लेकिन मुझे ऐसा करने के लिए पर्याप्त सी समझ में नहीं आता है।
तो क्या कोई अन्य तरीका है जिसे मैं याद कर रहा हूं या मैंने कोशिश किए गए प्रयासों में कुछ सुधार किया है?
किसी भी उत्तर के लिए धन्यवाद!
धन्यवाद, लेकिन मुझे वास्तव में कॉलबैक का उपयोग करने और छवियों को मैन्युअल रूप से प्रदर्शित करने की आवश्यकता है। मुझे केवल ग्रेस्केल छवि की आवश्यकता नहीं है, मैं कुछ और फिल्टर का उपयोग कर रहा हूं, मैंने अपने प्रश्न में उल्लेख नहीं किया है ... –