Editing PlayStation 4 Camera

Jump to navigation Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.

Latest revision Your text
Line 1: Line 1:
{{Wikify}}
== Playstation 4 Camera ==
== Playstation 4 Camera ==
See also {{talk}} page
See also {{talk}} page
Line 70: Line 67:
* depth calculation/imaging
* depth calculation/imaging
* pad, move, face, head and hand recognition/tracking
* pad, move, face, head and hand recognition/tracking
* one of the cameras can be used for generating the video image, while the other used for motion tracking.
* one of the cameras can be used for generating the video image, with the other used for motion tracking.


==== Hardware review ====
==== Hardware review ====
<imagemap>
*Back chip connected to [[Aux]] port is labeled OV00580-B21G-1C. The OmniVision 580 {{G|ASIC}}  is not documented, so it seems to have been made specially for Sony out of the [http://www.ovt.com/products/ip_table.php 500/600 serie] of processors.
File:PS4-Camera-diagram.jpg|350px|thumb|right|Ps4 Camera diagram
</imagemap>
 
*'''OV580''': Back chip connected to [[Aux]] port is labeled OV00580-B21G-1C. The OmniVision 580 {{G|ASIC}}  is not publicy documented (without signing a NDA with Omnivision), so it seems to have been made specially for Sony (other companies using it are Mantis Vision and LeapMotion) out of the [http://www.ovt.com/products/ip_table.php 500/600 serie] of processors.


others Omnivision USB bridge solutions: PlayStation EyeToy(OV519) and [http://www.psdevwiki.com/ps3/PlayStation_Eye PlayStation Eye] (OV534).
*The 1-megapixel Image Sensors is speculated to be an CMOS OV9713.


*'''OV9713''': The 1-megapixel [http://en.wikipedia.org/wiki/Image_sensor Image Sensors] are two CMOS OV9713.
*Front chip connected to microphone array, labeled [http://www.akm.com/page.jsp?id=230677 5703 324A], is speculated to be a 4-channel 24-bit '''A'''nalog-to-'''d'''igital  (A/D) converter packaged in a space-saving 28-pin {{G|QFN}} package.


*'''AK5703''': The Front chip connected to microphone array, labeled 5703 324A, is a 4-channel 24-bit '''A'''nalog-to-'''d'''igital  (A/D) converter packaged in a space-saving 28-pin {{G|QFN}} package. Datasheet is available [http://www.akm.com/akm/en/file/datasheet/AK5703EN.pdf here] and [http://www.akm.com/page.jsp?id=230677 here.]
*{{G|EEPROM}} is speculated to be labeled as ag51a.
 
*'''4g51a''': {{G|EEPROM}} is labeled as 4g51a. It contains the initial configuration for PlayStation 4 Camera.


=== Gallery ===
=== Gallery ===
{{Anchored|Playstation 4 Camera teardown pictures}}
<gallery>
ps4-camera-0.jpg|PS4 Camera - picture 0
ps4-camera-1.png|PS4 Camera - picture 1
ps4-camera-2.png|PS4 Camera - picture 2
ps4-camera-3.png|PS4 Camera - picture 3
ps4-camera-4.png|PS4 Camera - picture 4
</gallery>
{{Anchored|Pre E3 Playstation 4 Camera pictures}}
{{Anchored|Pre E3 Playstation 4 Camera pictures}}


Line 136: Line 117:
PS4 Camera - pic8}}
PS4 Camera - pic8}}
|}
|}
{{Anchored|Playstation 4 Camera teardown pictures}}
<gallery>
ps4-camera-0.jpg|PS4 Camera - picture 0
ps4-camera-1.png|PS4 Camera - picture 1
ps4-camera-2.png|PS4 Camera - picture 2
ps4-camera-3.png|PS4 Camera - picture 3
ps4-camera-4.png|PS4 Camera - picture 4
</gallery>


=== Videos ===
=== Videos ===
Line 145: Line 135:


== Analysis ==
== Analysis ==
*[[PS4cam-USB|Communication USB]]
=== USB ===
==== Device Descriptor ====
 
<div style="height:600px; width:600px; overflow:auto">
{| class="wikitable"
|-
! colspan="5" style="background-color:#C0C0C0; color:#000000;" |[http://linuxcommand.org/man_pages/lsusb8.html Device Descriptor]
|-
! Offset
! Field
! Size
! Value
! Description
|-
| 0 || bLength || 1 || 0x12 || Size of this descriptor in bytes (18)
|-
| 1 || bDescriptorType || 1 || 0x01 || DEVICE descriptor type (Constant = 1)
|-
| 2 || bcdUSB || 2 || 0x0300 || USB Spec release number ([http://en.wikipedia.org/wiki/USB#USB_3.0 3.00]):
<small>with which the device and is descriptors are compliant (e.g.: 0x0200 (USB2.0), 0x0300,
([[USB_3.0|USB3.0]]))</small>
|-
| 4 || bDeviceClass || 1 || 0x00 || [http://www.usb.org/developers/defined_class Class code] assigned by [http://en.wikipedia.org/wiki/USB_Implementers_Forum USB-IF]
<small>(used by the operating system to find a class driver for your device)</small>
<small>
*00h means each interface defines its own class (identify itself at the interface level: bInterfaceClass )
*FFh means vendor-defined class
*Any other value must be a class code
</small>
|-
| 5 || bDeviceSubClass || 1 || 0x00 || SubClass Code assigned by USB-IF
<small>(used by the operating system to find a class driver for your device)</small>
|-
| 6 || bDeviceProtocol || 1 || 0x00 || Protocol Code assigned by USB-IF
<small>(used by the operating system to find a class driver for your device)</small>
|-
| 7 || bMaxPacketSize0 || 1 || 0x09  || Max packet size for endpoint 0.
<small>
*Must be 8, 16, 32 or 64
*Must be 9 according to [http://www.usb.org/developers/tools/USB30CVSpec_1_4.pdf Compliance Test Specification for the USB 3.0 Architecture p29 9.1]
</small>
|-
| 8 || idVendor || 2 || 0x05a9 || [http://www.linux-usb.org/usb.ids Vendor ID (VID)] (OmniVision Technologies, Inc.) - must be obtained from USB-IF
<small>(used by the operating system to find a driver for your device)</small>
|-
| 10 || idProduct || 2 || 0x0580 || Product ID (PID) - assigned by the manufacturer
<small>(used by the operating system to find a driver for your device)</small>
|-
| 12 || bcdDevice || 2 || 0x0100 || Device release number (Version: 1.00)
<small>in binary coded decimal</small>
|-
| 14 || iManufacturer || 1 || 0x01 || Index of string descriptor describing manufacturer
<small>set to 0 if no string</small>
|-
| 15 || iProduct || 1 || 0x02  || Index of string descriptor describing product
<small>set to 0 if no string</small>
|-
| 16 || iSerialNumber || 1 || 0x00 || Index of string descriptor describing device serial number<BR /> <small>set to 0 if no string</small>
|-
| 17 || bNumConfigurations || 1 || 0x01 || Number of possible configurations
|-
|}
</div><br />
 
==== Configuration Descriptor ====
 
{| class="wikitable"
|-
! colspan="5" style="background-color:#C0C0C0; color:#000000;" |Configuration Descriptor
|-
! Offset
! Field
! Size
! Value
! Description
|-
| 0 || bLength || 1 || 0x09 || Size
|-
| 1 || bDescriptorType || 1 || 0x02 || (= 2)
|-
| 2 || wTotalLength || 2 || 0x002C || Total number of bytes (44) in this descriptor and all the following descriptors (9+9+ + +)
|-
| 4 || bNumInterfaces || 1 || 0x01 || Number of interfaces supported by this configuration
|-
| 5 || bConfigurationValue || 1 || 0x01 || Value used by Set Configuration to select this configuration
|-
| 6 || iConfiguration || 1 || 0x00 || Index of string descriptor describing configuration - set to 0 if no string
|-
| 7 || bmAttributes || 1 || 0x80 || Powered by the bus (10000000)
<small>
specify power parameters for the configuration :
<small>
{| cellpadding="4" style="border-collapse: collapse; text-align: center;"
|-
| colspan="6" |<code>''8-digit bit binary''</code>
|-
|style="border: 1px solid; border-left: hidden;"  | …
|style="border: 1px solid;"                      | 7|6|5|4|3|2|1|0
|style="border: 1px solid; border-right: hidden;" | …
|}
</small>
*D0 - D4: Reserved.
*D5: The configuration supports remote wakeup.
*D6: The configuration is self-powered and does not use power from the bus.
*D7: The configuration is powered by the bus.
</small>
|-
| 8 || bMaxPower || 1 || 0x32 || Maximum current: 100mA drawn by device in this configuration.<BR /><small>In units of 2mA. So 0x32 (50) means 100 mA</small>
|-
! colspan="5" style="background-color:#C0C0C0; color:#000000;" |Interface Descriptor
|-
| 0 || bLength || 1 || 0x09 || Size
|-
| 1 || bDescriptorType || 1 || 0x04 || (= 4)
|-
| 2 || bInterfaceNumber || 1 || 0x00 || Number identifying this interface.
<small>Zero-based value</small>
|-
| 3 || bAlternateSetting || 1 || 0x00 || The first (and default) value used to select alternative setting is always 0
<small>
(An interface can have more than one variant, and these variants can be switched between, while other interfaces are still in operation)
</small>
|-
| 4 || bNumEndpoints || 1 || 0x02  || Number of Endpoints used for this interface
|-
| 5 || bInterfaceClass || 1 || 0xFF || Class code assigned by USB-IF
<small>
*00h is a reserved value
*FFh means vendor-defined class
*Any other value must be a class code
</small>
|-
| 6 || bInterfaceSubClass || 1 || 0x00 || SubClass Code assigned by USB-IF
|-
| 7 || bInterfaceProtocol || 1 || 0x00 || Protocol Code assigned by USB-IF
|-
| 8 || iInterface || 1 || 0x00 || Index of string descriptor describing interface - set to 0 if no string
|-
! colspan="5" style="background-color:#C0C0C0; color:#000000;" |Endpoint (OUT) Descriptor
|-
| 0 || bLength || 1 || 0x0- || Size
|-
| 1 || bDescriptorType || 1 || 0x05 || (= 5)
|-
| 2 || bEndpointAddress || 1 || 0x01 || OUT<--(00 00 0001)-->1
<small>
The address of this endpoint within the device:
*D3-D0: Endpoint number
*D6-D4: Reserved. set to Zero
*D7: Direction: 0 = OUT, 1 = IN (Ignored for Control Endpoints)
</small>
|-
| 3 || bmAttributes || 1 || 0x02 || Bulk (00000010)
<small>
(D1:0) [http://www.inno-logic.com/resources/21.php#4 Transfer Type:]
*00 = Control
*01 = Isochronous
*10 = Bulk
*11 = Interrupt
 
The following only apply to isochronous endpoints. Else set to 0.
 
(D3:2) Synchronisation Type (ISO mode):
*00 = No Synchronisation
*01 = Asynchronous
*10 = Adaptive
*11 = Synchronous
 
(D5:4) Usage Type (ISO mode):
*00 = Data endpoint
*01 = Feedback endpoint
*10 = Implicit feedback Data endpoint
*11 = Reserved
 
(D7:6) Reserved
Set to 0
</small>
|-
| 4 || wMaxPacketSize || 2 || 0x0400 || (1024)
|-
| 6 || bInterval || 1|| 0x00 || - (unit depends on device speed)
<small>
Interval for polling endpoint for data transfers. Expressed in frames (ms) for low/full speed or microframes (125{{micro}}s) for high speed<BR />
(ignored for Bulk & Control Endpoints. Isochronous must equal 1 and field may range from 1 to 255 for interrupt endpoints)
|-
| - || bMaxBurst || 1 || 0x0F || MaxBurst (15)
<small>
The number of packets the endpoint can send or receive as part of a burst (range 1 - 16). See transfer Type.
</small>
|-
! colspan="5" style="background-color:#C0C0C0; color:#000000;" |Endpoint (IN) Descriptor
|-
| 0 || bLength || 1 || 0x0- || Size
|-
| 1 || bDescriptorType || 1 || 0x05 || ( =5)
|-
| 2 || bEndpointAddress || 1 || 0x82 || IN<--(10 00 0010)-->2
|-
| 3 || bmAttributes || 1 || 0x02 || Bulk
|-
| 4 || wMaxPacketSize || 2 || 0x0400 || (1024)
|-
| 6 || bInterval || 1 || 0x00 || 0
|-
| - || bMaxBurst || 1 || 0x0F || MaxBurst (15)
|-
! colspan="5" style="background-color:#C0C0C0; color:#000000;" |Binary Object Store Descriptor
|-
| 0 || bLength || 1 || 0x05 || Size (05)
|-
| 1 || bDescriptorType || 1 || 0x0F || (= 15)
|-
| 2 || wTotalLength || 1 || 0x16 || (22) (5+7+10)
|-
| 3 || bNumDeviceCaps || 1 || 0x02 || (2)
<small>
must be at least 2 for SuperSpeed devices and equal to 3 for USB 3.0 hubs.
</small>
|-
| - || colspan="4" style="background-color:#F0B0BF; color:#000000; text-align:center;"|USB 2.0 Extension Device Capability:
|-
| || bLength || 1 || 0x07 || (7) Size
|-
| || bDescriptorType || 1 || 0x10 || ( =16)
|-
| || bDevCapabilityType || 1 || 0x02 || (2)
<small>
*02 (USB 2.0 EXTENSION) or 03 (SUPERSPEED_USB) or 04 (CONTAINER_ID)
</small>
|-
| || bmAttributes || 4 || 0x00000002 || (00000000  00000000  00000000  00000010) Link Power Management supported
<small>
See [http://www.usb.org/developers/docs/usb20_docs/usb_20_070113.zip USB2-LPM-Errata-final.pdf p3]
*D0 Reserved. Must be set to zero
*D1 A value of one in this bit location indicates that this device supports the Link Power Management (LPM) protocol
*D2 BESL & Alternate HIRD definitions supported. The LPM bit must be set to a one when this bit is a one
*D3 Recommended Baseline BESL valid
*D4 Recommended Deep BESL valid
*D11:8 Recommended Baseline BESL value. Field shall be ignored by system software if bit [3] is a zero.
*D15:12 Recommended Deep BESL value. Field shall be ignored by system software if bit is a zero.
*D31:16 Reserved. Must be set to zero.
</small>
|-
| - || colspan="4" style="background-color:#F0B0BF; color:#000000; text-align:center;"|SuperSpeed USB Device Capability:
|-
| || bLength || 1 || 0x0A || (10) Size
|-
| || bDescriptorType || 1 || 0x10 || (= 16)
|-
| || bDevCapabilityType || 1 || 0x03 || (3)
|-
| || bmAttributes || 1 || 0x00 || (00000000)
<small>
*D1 is 1 if it is a LTM capable device
</small>
|-
| || wSpeedsSupported ||  || 0x000e ||
<small>
*Device can operate at Full Speed (12Mbps)
*Device can operate at High Speed (480Mbps)
*Device can operate at SuperSpeed (5Gbps)
</small>
|-
| || bFunctionalitySupport ||  ||  ||
<small>
Lowest fully-functional device speed is Full Speed 12Mbps)
</small>
|-
| || bU1DevExitLat ||  ||  || 10{{micro}}
|-
| || bU2DevExitLat ||  ||  || 32{{micro}}s
|-
| || Device Status ||  || 0x0000 ||
|-
|}


== Project ==
== Project ==
Please note that all contributions to PS4 Developer wiki are considered to be released under the GNU Free Documentation License 1.2 (see PS4 Developer wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To protect the wiki against automated edit spam, we kindly ask you to solve the following hCaptcha:

Cancel Editing help (opens in new window)