3D Video Programming for Android

Post on 15-Jan-2015

2.383 views 1 download

Tags:

description

Review of 3D Video compression and delivery methods in H.264 and HDMI 1.4a. Code sample of H.264 3D encoding for Nvidia, TI

Transcript of 3D Video Programming for Android

1

Yossi Cohen

3D Video forAndroid

2

Content Intro to 3D Video3D Video in H.2643D Video in HDMI 1.4aAndroid 3D Video encoding

TI OMAP4 ConfigurationQualcomm Configuration

3

Intro to 3D Video

4

What is 3D Video 3d content is made by showing a separate image (video) to

each eye.

3D Glasses based technologies: ANAGLYPH POLARIZATION ECLIPSE METHOD

3D Glass-free technologies: GUIDED LIGHT LENTICULAR SCREEN PARALLAX BARRIER

This presentation does not discuss the presentation technologies, ,instead we focus on how to compress and deliver the video to the screen.

5

3D Video Delivery

6

Legacy 3D Video DeliveryDifferent devices delivered 3D Video as one video

stream with the two R/L screens merged into one rectangle:1. DirectTV uses Side-by-Side layout

2. PlayStation uses Top-Bottom layout

3. Blue-Ray Player FULL-HD Side-by-Side

User should manually set the TV to 3Dand Configure the right packing mode

7

Side-by-Side 3D Example BlueRay video with Full HD SBSResolution is 3840X1280

8

3D Video in HDMI 1.3 Delivery of 3D Video in packing of

1 and 2 was possible in HDMI:

Side-by-Side 3D in HDMI

Top-Bottom 3D in HDMI

Problems

User should manually configure TV to the correct mode

3D is not viewed as Full-HD. Each eye receives “Half-HD” Quality.

Duo to Bandwidth constraints no support for 3D-Full-HD

9

3D in HDMI 1.4a and HDMI 2+ In Advance HDMI standards, HDMI include Header fields

which signals the frame packing mode

Example: 3D SBS transmission in HDMI 1.4

10

H.264 3D Video

11

H.264 3D ProfilesEncoding of one stream video slices halved into

R/L screens can be done in ANY H.264 Profile.Alternative encoding are:

MVCStereo-High

12

H.264 AVC 3D encoding modeThere are two options for 3D H.264 AVC encoding:Regular encoding of a single video stream with

two L/R frames packed into one FrameCodec is unaware that the video is 3DNo signaling information is sent

Informing the Encoder the video is 3DEncoder will insert Frame-Packing informationTV / Sink should switch automatically to 3D correct frame

packing according to signaled information

13

H.264 3D SignalingH264 Signals 3D Video and the type of Frame

Packing (Side-by-Side, Top-Bottom, Interlaced…) by Frame Packing Arrangement structure

FPA is an optional message inside the SEI NALFrame Packing Agreement structure was added to

the standard in 2010.A device receiving H.264 stream with SEI-FPA

could automatically change its mode to the correct 3D Mode (if it understands those headers and has 3D capabilities).

14

Example of 3D Configuration There are two types of FPA extensions 2004 & 2010

2004 states the frame arrangement SBS, Top-Bottom etc

2010 is more detailed as described below

15

MVC – Multi View CodingMVC is a standard for compression of multiple

video streams into one encoded streamsAll streams are encoded as differences (deltas)

from the first stream (like SVC)MVC with 2 video streams is 3D stereo

16

H.264 Stereo ModeH.264 Stereo Mode is like MVC with only two

cameras.

17

Wireless Dongle

Wireless 3D Video transmission

HDMIConverter

Automatic 3D Video

H.264 with SEI FPA over Wireless

3D Video over HDMI 1.4a

H.264 Decoder

H.264Encoder

18

3D VIDEO COMPRESSION ON ANDROID

19

TI 3D Configuration For all platforms (Nvidia, TI, QCOM), in the Encoder OMX

input pin configuration add the appropriate code according to the processor

20

TI 3D Configuration

OMX_TI_VIDEO_PARAM_AVCENC_FRAMEPACKINGINFO2010 FramePacking2010;

FILL_OMX_VERSION(FramePacking2010 ,OMX_TI_VIDEO_PARAM_AVCENC_FRAMEPACKINGINFO2010);

FramePacking2010.nPortIndex = OMX_PORT_INDEX_INPUT;

FramePacking2010.eFramePackingType = OMX_TI_Video_FRAMEPACK_SIDE_BY_SIDE;

FramePacking2010.nFrame0PositionX = 0;

FramePacking2010.nFrame0PositionY = 0;

FramePacking2010.nFrame1PositionX = 0;

FramePacking2010.nFrame1PositionY = 0

OMX_CALL( SetParameter, (OMX_INDEXTYPE) OMX_TI_IndexParamStereoFramePacking2010Settings, &FramePacking2010 );

OMX_TI_VIDEO_PARAM_FRAMEDATACONTENTTYPE FrameData;

FILL_OMX_VERSION(FrameData ,OMX_TI_VIDEO_PARAM_FRAMEDATACONTENTTYPE);

FrameData.nPortIndex = OMX_PORT_INDEX_INPUT;

eContentType = OMX_TI_Video_AVC_2010_StereoFramePackingType;

OMX_CALL( SetParameter,(OMX_INDEXTYPE)OMX_TI_IndexParamVideoFrameDataContentSettings, &FrameData );

21

Qualcomm Configuration

Unfortunately couldn’t find a method for this on Qualcomm processors. If you know please email me or comment and I’ll update this presentation

22

Thank you!

Video Expert

Lectures on Video / Android / VoIP

Android Native Developer

More About me:

Yossi Cohenyossicohen19@gmail.comhttp://www.mobilevideotech.com

+972-545-313092