Closed Bug 968144 Opened 10 years ago Closed 10 years ago

[B2G getUserMedia] camera frame buffer doesn't return to camera HAL when preview stopping

Categories

(Core :: WebRTC: Audio/Video, defect)

x86_64
Linux
defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla30

People

(Reporter: ayang, Assigned: ayang)

References

Details

Attachments

(2 files, 1 obsolete file)

Attached file gum_log
Enable video gUM and try http://mozilla.github.io/webrtc-landing/gum_test.html few times.

The camera HAL will be deadlock when preview stopping due to the preview buffer dones't return to camera HAL.

I've created a hack according to following analysis from log. I'll discuss with :slee later.

----

3049 02-05 08:30:50.864 I/PRLog   (  195): 40968[443c6700]: queueBuffer: E
  ==> camera could already get stop command at this point.

3050 02-05 08:30:50.864 I/PRLog   (  195): 40968[443c6700]: GonkNativeWindow::getCurrentBuffer
3051 02-05 08:30:50.864 I/PRLog   (  195): 40968[443c6700]: android::CameraGraphicBuffer::CameraGraphicBuffer(android::GonkNativeWindow*, uint32_t, uint32_t, mozilla::layers::SurfaceDescriptor):316 : this=45a4f8d0
3052 02-05 08:30:50.864 I/PRLog   (  195): 40968[443c6700]: bool mozilla::DOMCameraPreview::ReceiveFrame(void*, mozilla::ImageFormat, void (*)(mozilla::layers::Image*, void*, uint32_t, uint32_t)):186 : this=448f0420
3053 02-05 08:30:50.864 I/PRLog   (  195): 40968[443c6700]: queueBuffer: X
3054 02-05 08:30:50.864 V/EmulatedCamera_Device(   40): Select: Select, fd -1
3055 02-05 08:30:50.905 I/PRLog   (  195): 41200[43de4980]: dequeueBuffer: E
3056 02-05 08:30:50.905 I/PRLog   (  195): 41200[43de4980]: dequeueBuffer: Try again
  ==> fail to dequeue because camera received stop command

3057 02-05 08:30:50.944 I/Gecko   (  195): [Child 195] WARNING: nsWindow::GetNativeData not implemented for this type: file /home/alfredo/mozilla/mozilla-central/widget/xpwidgets/PuppetWidget.cpp, line 714
3058 02-05 08:30:50.954 I/Gecko   (  195): [Child 195] WARNING: We don't support transparent content with displayports, force it to be opqaue: file /home/alfredo/mozilla/mozilla-central/layout/base/nsDisplayList.cpp, line 1214
3059 02-05 08:30:51.064 I/PRLog   (  195): 1074414728[40222080]: Listener removed on purpose, mFinished = 1
3060 02-05 08:30:51.064 I/PRLog   (  195): 1074414728[40222080]: Sent recording-window-ended for window 4 (outer 1)
3061 02-05 08:30:51.064 I/PRLog   (  195): 1074414728[40222080]: mozilla::StopPreviewTask::StopPreviewTask(mozilla::CameraControlImpl*):573 : this=45af8fd0
3062 02-05 08:30:51.064 I/PRLog   (  195): 63968[4430ee00]: virtual nsresult mozilla::StopPreviewTask::Run():583
3063 02-05 08:30:51.064 I/PRLog   (  195): 63968[4430ee00]: nsresult mozilla::nsGonkCameraControl::StopPreviewInternal(bool): stopping preview (mDOMPreview=448f0420)
3064 02-05 08:30:51.064 I/PRLog   (  195): 63968[4430ee00]: void android::GonkCameraHardware::StopPreview():322 : this=44d72ac0
3065 02-05 08:30:51.064 V/EmulatedCamera_CallbackNotifier(   40): disableMessage: msg_type = 0x10
3066 02-05 08:30:51.064 V/EmulatedCamera_CallbackNotifier(   40):     CAMERA_MSG_PREVIEW_FRAME
3067 02-05 08:30:51.064 V/EmulatedCamera_CallbackNotifier(   40): **** Currently enabled messages:
3068 02-05 08:30:51.064 V/EmulatedCamera_CallbackNotifier(   40):     CAMERA_MSG_ERROR
3069 02-05 08:30:51.064 V/EmulatedCamera_CallbackNotifier(   40):     CAMERA_MSG_FOCUS
3070 02-05 08:30:51.064 V/EmulatedCamera_CallbackNotifier(   40):     CAMERA_MSG_ZOOM
3071 02-05 08:30:51.064 V/EmulatedCamera_CallbackNotifier(   40):     CAMERA_MSG_PREVIEW_METADATA
3072 02-05 08:30:51.064 V/EmulatedCamera_Camera(   40): doStopPreview
3073 02-05 08:30:51.064 V/EmulatedCamera_Device(   40): stopDeliveringFrames
3074 02-05 08:30:51.064 V/EmulatedCamera_Device(   40): stopWorkerThread
3075 02-05 08:30:51.064 V/EmulatedCamera_Device(   40): Stopping emulated camera device's worker thread...
3076 02-05 08:30:51.064 V/EmulatedCamera_Device(   40): Requesting to stop worker thread!!!
  ==> camera HAL waits for buffer returning, but it won't happen.
Attached patch gUM_frame_queue (obsolete) — Splinter Review
With help from :slee, here is the patch.
Attachment #8370689 - Attachment is obsolete: true
Attachment #8371211 - Flags: review?(rjesup)
Attachment #8371211 - Flags: review?(rjesup) → review+
Keywords: checkin-needed
Attachment #8371211 - Attachment is patch: true
https://hg.mozilla.org/mozilla-central/rev/ad378ab4a470
Status: NEW → RESOLVED
Closed: 10 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla30
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: