2013-08-18 8 views
41

मैं डेवलपर्स के उपभोग के लिए Camera एपीआई आसान बनाने के लिए लाइब्रेरी पर काम कर रहा हूं।QualcommCameraHardware के स्रोत के विचार देशी_get_picture: MSM_CAM_IOCTL_GET_PICTURE कनेक्शन का समय समाप्त हो गया है?

पीछे के कैमरे का उपयोग कर पोर्ट्रेट मोड में Droid Incredible 2, एक तस्वीर लेने में विफल रहता है। विशेष रूप से, मैं LogCat में इस क्रम मिलती है:

08-18 09:25:52.094: E/QualcommCameraHardware(1368): native_get_picture: MSM_CAM_IOCTL_GET_PICTURE fd 25 error Connection timed out 
08-18 09:25:52.094: E/QualcommCameraHardware(1368): getPicture failed! 
08-18 09:25:52.094: E/QualcommCameraHardware(1368): get picture failed, giving jpeg callback with NULL data 

उन संदेशों होते हैं ~ 5 सेकंड के बाद मैं Camera पर takePicture() फोन है, जो कुछ पुराने स्रोत कोड मैं QualcommCameraHardware कि ioctl() पर एक 5000ms टाइमआउट सेट को देखने के साथ फिट बैठता है कैमरा हार्डवेयर से बात करने के लिए कॉल करें।

शुद्ध परिणाम यह है कि onPictureTaken() को nullbyte[] जेपीईजी डेटा का पारित किया गया है, जिसका अर्थ है कि हमारे पास कोई फोटो नहीं है।

यह डिवाइस सामने वाले कैमरे के साथ पोर्ट्रेट मोड में काम करने सहित अन्य सभी परीक्षण कॉन्फ़िगरेशन में मेरे कोड के साथ काम करता है।

क्या किसी को कुछ विशिष्ट पता है जो इस विशेष विफलता का कारण बन सकता है?

अद्यतन

मैं अब त्रुटि पुन: पेश कर सकते हैं। मैं सवाल हटा दूंगा, लेकिन उत्तर देने के बाद यह स्पष्ट रूप से संभव नहीं है।

+1

क्या आपने कम संकल्पों पर तस्वीर लेने का प्रयास किया है? –

+0

@AliImran: मैं इसे कभी-कभी कोशिश करूंगा, जब मैं और मेरा अविश्वसनीय 2 एक ही स्थान पर एक ही स्थान पर होंगे। :-) धन्यवाद! – CommonsWare

+0

@AliImran: कम रिज़ॉल्यूशन पर आउटपुट को कैप करना वास्तव में मदद करता प्रतीत होता है, हालांकि मुझे अब यह विशेष त्रुटि नहीं मिल रही थी और इसके बजाय इसे दूषित आउटपुट मिल रहा था। धन्यवाद! – CommonsWare

उत्तर

0

संभवतः cameraService जो मीडिया प्रक्रिया का हिस्सा है पृष्ठभूमि में क्रैश हो गया है। यदि आप एंड्रॉइड में डिफ़ॉल्ट कैमरा ऐप चलाने की कोशिश करते हैं और यह दिखाई नहीं देता है तो यह त्रुटि प्राप्त करने के लिए बस डिवाइस को रीबूट करें।

मुझे लगता है कि आप कच्चे और जेपीईजी कॉलबैक दोनों के लिए चित्र कॉलबैक का पुन: उपयोग कर रहे हैं। तो अगर इसे कच्चे कॉलबैक के रूप में बुलाया गया था, तो डेटा शून्य हो सकता है। क्योंकि दस्तावेज़ कहता है,

एक असीमित छवि कैप्चर ट्रिगर करता है। छवि कैप्चर प्रगति के रूप में कैमरा सेवा एप्लिकेशन को कॉलबैक की एक श्रृंखला शुरू करेगी। छवि कैप्चर करने के बाद शटर कॉलबैक होता है। इसका उपयोग उपयोगकर्ता को यह जानने के लिए ध्वनि को ट्रिगर करने के लिए किया जा सकता है कि छवि कैप्चर की गई है। कच्चे कॉलबैक तब होता है जब कच्चे छवि डेटा उपलब्ध होता है (नोट: यदि कोई कच्ची छवि कॉलबैक बफर उपलब्ध नहीं है या कच्ची छवि कॉलबैक बफर कच्ची छवि को पकड़ने के लिए पर्याप्त नहीं है तो डेटा शून्य होगा)। पोस्टव्यू कॉलबैक तब होता है जब एक स्केल, पूरी तरह संसाधित पोस्टव्यू छवि उपलब्ध होती है (नोट: सभी हार्डवेयर इसका समर्थन नहीं करते हैं)। जेपीईजी कॉलबैक तब होता है जब संपीड़ित छवि उपलब्ध होती है। यदि एप्लिकेशन को किसी विशेष कॉलबैक की आवश्यकता नहीं है, तो कॉलबैक विधि के बजाय शून्य को पास किया जा सकता है।

+0

"मुझे लगता है कि आप दोनों कच्चे और जेपीईजी कॉलबैक के लिए तस्वीर कॉलबैक का पुन: उपयोग कर रहे हैं" - मैं कच्चे कॉलबैक की आपूर्ति नहीं कर रहा हूं ('शून्य'), और मैं एक जेपीईजी छवि का अनुरोध कर रहा हूं। – CommonsWare

1

MSM_CAM_IOCTL_GET_PICTURE कर्नेल कॉल जो समारोह चलाता

static int msm_get_pic(struct msm_sync *sync, void __user *arg) 

मैं HTCdev से अपने डिवाइस के लिए कर्नेल स्रोत डाउनलोड किया है और समारोह

drivers/media/video/msm/msm_camera-7x30.c 

में परिभाषित पाया जाँच कर सके क्या हो रहा है कर्नेल संदेश जब आप एक तस्वीर लेते हैं?

adb shell su -c "dmesg" 
+0

... और अब मैं समस्या को पुन: उत्पन्न नहीं कर सकता। मैंने किसी अन्य डिवाइस के लिए अपने ऐप में कुछ बदलना होगा, जिस पर इस मुद्दे को ठीक करने का दुष्प्रभाव था। मैं एक या दो दिन में प्रश्न हटा दूंगा। अपना समय बर्बाद करने के लिए मेरी माफ़ी। – CommonsWare

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

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