회원 및 비회원 모두 열람이 가능합니다. 최대 업로드 가능한 용량은 20MB 입니다.

해외 개발자들로부터 쿼드코어의 성능이 어떻냐는 질문이 정말 많이 들어왔습니다.
시각적으로 보여줄만한 것을 찾아보다, 역시 동영상 재생 능력을 보여주는 것이 좋겠다고 판단하였습니다.

물론 삼성 프로세서에는 MFC(Multi-Function-Codec)이라는 하드웨어 기반의 전용 동영상 가속기가 있습니다.
목표는 이 가속기를 전혀사용하지 않고, 4개의 ARM core와 NEON SIMD 연산장치만 이용해서 1080p Full HD 동영상을 재생해 보는 것입니다. 솔직히 무모한 도전이라는 생각을 해봤고, 설마 될까 했습니다.

FFMPEG 의 ARM build option을 보면 ARMv5,v6,v7 같은 Architecture를 선택할 수 있고, 추가로 NEON SIMD를 사용할 수 있습니다. 거기에 Multi-Core까지 사용할 수 있는 옵션도 있습니다. 이 Multi-core 옵션 덕분에 4~5Ghz 급의 ARM core와 비슷한 성능을 보여줄 수 있습니다.

MX player라는 비디오 플레이 앱을 Android Market (Google Play)에서 찾을 수 있으며, 별도로 FFmpeg codec도 받았습니다. 무료 버전은 광고가 좀 나오지만, 크게 거슬리지는 않더군요. 그리고 FFmpeg 라이센스도 정확히 잘 지키는 개발자라는 생각이 들었습니다.

아래 동영상을 보세요. 3 종류의 1080p Full-HD 동영상 재생해 보았으며 모두 Software 만으로 돌려보았습니다.

테스트에 사용한 개발보드는 Exynos-4412 쿼드코어가 탑재된 ODROID-X 입니다.

물론 상업적으로는 크게 의미있는 일이 아닐수도 있습니다. 소비전력도 많고 CPU도 많이 뜨겁습니다.
그런데 소프트웨어 엔지니어링 측면에서 보면 좀 큰 의미가 있는 듯 합니다.
부가적으로 반도체 제조사에서 하드웨어 코데 API를 제공하지 않아도 제품 개발이 가능해 질 수도 있고 다양한 OS에도 적용이 가능하겠죠.



이 글의 원본 링크는 다음과 같습니다.
http://www.hardkernel.com/?b122


쭈암

2012.07.17 09:58:34
*.186.87.8

실제로는 Full-HD 재생시 Renderer측 CPU 연산 ( 메모리 Bandwidth 소모 )가 큽니다.

렌더러(+YUV->RGB/Scaling)관련 부분만 Off-load시켜도 상당한 성능 향상이 있습니다.

720p 정도는 디코딩만 하면 1Ghz 싱글 코어로도 돌아갑니다.




이제현

2012.07.18 06:17:16
*.226.210.254

1.2Gz 듀얼 정도면 1080p 디코딩이 가능할까요?

말씀하신 Back-end는 제외하고,  H.264 Hi-profile에 10Mbps급 정도일때요...

착한이

2012.07.18 06:58:46
*.216.72.73

메모리를 충분히 사용할 수 있고 NEON까지 사용할 수 있다면 가능합니다.

싱글로도 가능합니다. 문제는 디코딩된 YUV 데이터를 스케일링과 CSC 하는 과정에서 싱글로는 힘듭니다. 그래서 하드웨어 스케일러를 사용합니다.

듀얼이면 하나는 디코딩하고 하나는 스케이링해서 렌더링 하면 될듯 합니다.

V310 보드에서 오디오까지는 아니지만 그냥 디코딩 해 보았습니다. Level 5.1, 20Mbps 짜리 입니다. 물론 상용화는 힘듭니다. ㅜㅜ

착한이

2012.07.17 09:51:44
*.216.72.73

SW 코덱의 장점이 있지만 SW 코덱을 사용한다면 차라리 X86 계열이 더 좋을 듯 합니다.

그리고 1080P 동영상은 1GHz 급(하드웨어 스케일러 사용) 되면 어느 정도 돌아갑니다. 하지만 상용에서 사용할 수가 없을 듯 합니다.

메모리 점유율, CPU 점유율을 보면 답이 없으니깐요.

그래도 멋지긴 하네요. 동영상 재생 용이 아닌 다른 곳에 사용하면 좋을 듯 합니다.

4412 정도 되면 1080P 동영상 2개를 재생하면서 보여 주면 더욱 좋을 듯 합니다. MFC를 이용해서 ...

Bitrate 를 20Mbps 이상으로 하고 H.264, High profile Level 5.1 로 말이죠. ^^

제가 언제 받을지 모르지만 보드 받으면 보여 드리죠 ^^ 사실 V310 에서도 가능하지만...

쭈암

2012.07.17 12:29:42
*.204.248.9

맞습니다. CPU연산 성능은 차고 넘치는데 보통 멀티미디어 관련해서는 메모리 버스가 발목을 잡습니다.

CPU야 멀티코어라 한개 정도는 미디어에서 써도 상관 없다고는 해도 메모리 버스 잡아먹는 건 답이 없거든요.

포스트 프로세싱 , 디인터레이싱까지 걸면 답이 잘 안나오더군요.


HD처리 하려면 HW 써도 Zero copy로 잘 구현하지 않으면 메모리 복사 때문에 문제가 생기더군요.

4MB/frame이니까 30fps면 120MB/sec 복사가 이루어 지는데 코덱에서 한번 , 포스트 프로세싱때 2번(Read 1회 / Write 1회), 디 인터레이싱때 2번 , 그리면서 2번 정도 되니까 840MB/sec=6.7Gbit/sec 정도 bandwidth를 잡아 먹습니다.



이제현

2012.07.18 06:23:45
*.226.210.254

x86에서와 마찬가지로 ARM에서도 의미는 좀 있지 않을까요? 

잠시 사용해본 결과 코덱 조합 걱정덜하고 그럭저럭 잘 돌아가는 ARM기반의 시스템도 좋다고 생각했습니다.


1080p 두개를 동시에 디코딩해서 어떤 분야에 응용할지는 잘 모르겠습니다.

4412의 HDMI 스펙을 좀 읽어보면 3D에 대한 이야기가 한줄로 짤막하게 나오는데.... 오히려 이 쪽으로 도전해 보시는게 어떨까요? 디코더가 받쳐주고 HDMI가 120Hz까지 지원만해 준다면 3D TV에 연결해서 재미있는 결과를 만들어 보심이.... 저희는 요즘 시간도 없고 이쪽 전문가가 아니라 군침만 흘리고 있답니다. ㅎㅎㅎ


그리고 이런 형태의 플레이들을 좀 들여다 보니 Back-end는 OpenGL을 이용하는것 같더군요.

Color Space Converter나 Scaler는 OpenGL에도 API가 있으니 Memory Band width에 주는 영향을 최소한으로 만든것 같습니다. ^.^

착한이

2012.07.18 06:32:23
*.216.72.73

예. 분명히 의미는 있습니다만 사용자 입장에서는 1080P 동영상 하나 돌리는데 많은 시스템 자원을 사용한다면 좋아하지 않을 듯 합니다. 제가 코덱 쪽을 하고 있지만 소비자나 업체에서 바라는 것이 워낙 많아서 힘듭니다. ㅜㅜ

1080P 2개를 말씀 드린 것은 단순히 성능 테스트 목적도 있지만 1080P 동영상 재생시 2배속 재생이 가능한가 테스트하기 위함이였습니다. V210으로는 720P급은 2배속 재생이 가능하지만 1080P는 2배속 재생이 불가능합니다. V310 과 4412에서는 가능할 듯 합니다. 그리고 1080P 가 2개 재생할 수 있다면 3D 영상을 구현이 가능할 듯 합니다. 3D 영상 중에 좌우 또는 상하로 영상이 붙어 있는 경우 또는 1080P 영상 2개로 되어 있는 경우에 3D로 재생이 가능하겠죠.

이 밖에도 응용할 수 있는 부분이 많이 있습니다. 블랙 박스 쪽에서도 이용이 가능하구요.

물론 LCD 또는 HDMI 가 120Hz 이상을 지원해야 겠지만... 4412의 HDMI 버전이 1.4A 아닌지요? 데이터 시트가 없어서 잘 모르겠습니다만...

오드로이드X를 빨리 받아야 할텐데 기다리기 힘드네요. ㅜㅜ

고도리

2012.07.21 03:28:28
*.200.239.234

" 1080P 2개를 말씀 드린 것은 단순히 성능 테스트 목적도 있지만 1080P 동영상 재생시 2배속 재생이 가능한가 테스트하기 위함이였습니다."


대략 어떤 내용인지 알겠습니다...... 또 언놈의 회사가 spec을 빠빵하게 요청했나 보네요...ㅎㅎ

쭈암

2012.07.21 03:49:13
*.98.3.35

MFC써도 2배속 재생 잘 됩니다. Diceplayer로 돌려보세요..재생 화면중 오른쪽 +/- 버튼 누르면 재생 속도 조절 됩니다.


착한이

2012.07.21 09:12:21
*.216.72.73

와우.. 고도리님은 아실꺼라 생각했습니다. ^^ 4412 에서 MFC 성능이 개선되지 않아서 걱정이 되긴 합니다. 2배속 재생이라고 함은 단순한 것이 아니죠 ^^ 코덱 따라서 처리해야 하는 것이 달라서 머리가 아픕니다. 어중간 하게 되는 녀석과 안되는 녀석이 있으면 안되니... 고도리님 자료는 잘 보고 있습니다. 항상 감사드립니다. 보드 잘 만들어 공구 해주세요. ^^

김장균

2012.07.18 00:14:29
*.234.218.16

어마어마하네요. 새로운 세상이 열린듯 합니다. AMD 퓨전 듀얼코어나 인텔 아톰 듀얼 코어 에서도 1080p는 버겁던데....

그런데 오드로이드 엑스에 NEON SIMD도 4개가 들어있나요?

이제현

2012.07.18 06:30:23
*.226.210.254

대부분 볼만한 수준으로 돌아갑니다만, AMD E450 APU 듀얼코어가 탑재된 노트북에서 버벅거리는 동영상은 ODROID-X에서도 버벅입니다. X264 Hi-profile에 15Mbps가 넘는것들은 대부분 그렇더군요.


NEON은 Core별로 1개씩이므로 모두 4개가 맞습니다. 그런데 실제 FFmpeg이 ARM 코어를 동시에 4개 쓰는것은 맞는데 NEON SIMD까지 동시에 4개가 돌아가는지는 잘 모르겠습니다. 쩝~~

쭈암

2012.07.18 23:31:55
*.204.248.75

diceplayer 는 잘 돌아가나요?

이제현

2012.07.19 00:02:56
*.226.221.108

odroider 엣 gmail 로 apk 보내주세요. 바로 검토 시작하겠습니다. 감사합니다.

쭈암

2012.07.19 08:58:53
*.186.87.8

Market에서 받으셔도 됩니다. Diceplayer Ad 로 받으시면 될 겁니다.

기본이 NEON버전이니 추가로 받아야 하는 APK는 없습니다.

파일 실행할때 Long-key로 Player 선택 하시면

자체 Player , OS Player , SW Player 선택이 가능합니다.

크게 문제 없으면 자체 Player쪽으로 해서 MFC쪽 가속이 될 것 같기는 합니다.


이제현

2012.07.19 19:52:15
*.90.137.102

네, 모든 옵션 다 해보겠습니다.

월요일까지 결과 보고 드리겠습니다. 좋은 결과로 사업 제휴가 가능하면 좋겠습니다.

고맙습니다. ^.^

이제현

2012.07.21 17:23:52
*.105.153.190

오! Diceplayer!!  

멀티 자막에 AC3 오디오 트랙도 재생이 잘되는군요.

MFC를 사용하니1080p 포함해서 배속재생(200%까지)이 잘 돌아 갑니다. 

혹시 배속 재생시 리샘플링도 하셨나요? 졸라맨 목소리가 덜 나서 여쭙습니다.


그런데 역시 소프트웨어 코덱에서는 일부 무거운 x.264나 WMV9는 약간 밀리는 현상이 있습니다.

720p는 문제가 없습니다만 1080p에서는 일부분 발견되었습니다.

i-frame이 미친듯이 밀려들어오는 이상한 테스트 영상들과 20mbps에 육박하는 경우에 그렇습니다.

추후에 멀티코어를 사용할 수 있게끔 고려해 주세요! 감사합니다.

쭈암

2012.07.22 00:14:42
*.98.3.35

SW쪽은 된다 수준으로 만들어 놔서 .. 조금 부족합니다. ffmpeg 구조가 Multi-thread쓰기에 적합하지 않아서요.

최적화를 해야하는데 밥벌어 먹고 살아야 할 다른 일들이 많아서..

배속 재생시 리샘플링 하고 있습니다. 졸라맨 목소리가 줄어들죠. 동영상 강의 쓰시는 분들이 많아서 배속 관련 기능에 피치 보정 기능을 넣었습니다. 대략 Exynos4xxx 들은 웬만한 PMP들은 저리 가라 할 정도 성능이 나옵니다.


그런데 Odroid에서는 ICS렌더러 쪽에 fimc쓸때 interlaced flag 정상적으로 주고 있나요?

갤S3는 1080i 영상 재생하면 de-interlacer가 안돌아서 가로로 줄이 가는 상황이더라구요. 원래 FIMC에 de-interlacer가 들어있는데 렌더러쪽에서 interlace flag를 안줘서 문제가 생기는 것 같더라구요.


Odroid를 하나 사서 renderer쪽 수정을 해야 하나.. 딜리버리가 꽤 걸려서 2차분 기다려서 살까 고민중입니다.


언아더월드

2012.07.31 05:01:02
*.237.45.193

궁금한점이 있어 질문드립니다. 

FIMC에 de-interlacer가 들어있다고 하셨는데 FIMC CISCCTRLn레지스터에 25번 bit를 의미하는 건지, 아니면 Vido Processor에 IPC를 말씀하신건지요?

글을 보고 테스트를 해보려고 SecFimc.cpp에 fimc_v4l2_set_fmt에 있는 3번째 파라메터를 V4L2_FIELD_INTERLACED_TB로 셋팅하여 테스트해보면 화면이 절반만 나옵니다.

int fimc_v4l2_set_fmt(int fd, enum v4l2_buf_type type, enum v4l2_field field, s5p_fimc_img_info *img_info, unsigned int addr)


원인은 MFC decoding -> de-interlace처리되지않은 prograssive 타입으로 저장 -> fimc에서 interlace flag를 주게 되면 한필드만 사용되어 반만 나오는 결과가 나오는 것이 아닌가 생각합니다.

어떻게 수정해야 되는지 알려주실수 있는지요?


HDMI출력의 경우, Video Processor에 IPC(Interlace to Progressive)에서 한라인씩 날려버리고 vertical x2로 펑튀기하여 De-interace처리되어 필드정보만 제대로 넘긴다면 줄가는 현상은 없어집니다. 다만 interlace와 progressive를 구분해야 되는데 구분할 만한 마땅한 정보가 없어 Colorformat을 보고 해야 될듯한데 수정해야 될부분이 조금 많네요.. ㅠㅠ;

 


쭈암

2012.07.31 08:56:29
*.186.87.8

저도 보드가 없어서 정확히 말씀드리기가 애매한데..

Inerlaced tb랑 v4l2 interlaced 를 번갈아 가면서 뿌려 줘야 하는게 아닐까요?


쭈암

2012.07.31 08:42:56
*.186.87.8

저도 보드가 없어서 정확히 말씀드리기가 애매한데..

Inerlaced tb랑 v4l2 interlaced 를 번갈아 가면서 뿌려 줘야 하는게 아닐까요?


언아더월드

2012.07.31 19:22:53
*.237.45.193

네 테스트해보겠습니다. 감사합니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 교육 홍보 및 광고는 "교육 및 세미나 홍보" 게시판을 이용해 ... 관리자 2010-07-15 107994
1750 예전에 묻고답하기에 PCB 뜨기 질문을 올렸었는데 file [4] Supsupi 2013-01-15 2902
1749 저희 회사 IP 차단이 되었네요. ㅠㅠ [7] 윤동열 2013-01-10 3247
1748 [근래관심사] 다시 디지털 음원에 푹 빠졌습니다. [4] 고도리 2013-01-07 2848
1747 IT 분야로 창업하실때 시행착오를 줄이시려면 ... [4] 파란새 2013-01-07 3278
1746 [JB-MR1]안드로이드 만쉐이....ㅠ.ㅠ, 또 구조를 바꿔 주셨네요 [2] 고도리 2013-01-07 3235
1745 제가 관심을 가졌던 아이템인데 벌써 사업화를 하신 곳이 있네... [2] 파란새 2013-01-06 3226
1744 이솝 시작부터 지금까지 살펴본 고수분들의 공통점 이랄까요 ..... [6] 파란새 2012-12-29 3069
1743 안드로이드 포팅 강의 듣고 왔습니다~ ^^ [6] 용진 2012-12-14 3191
1742 리눅스 커널 대신에 RTOS를 올린 안드로이드 등장. 유형목 2012-12-14 3147
1741 JDK6 설정 방법 :) chlrbgh0 2012-12-13 3273
1740 정말 긴 프로젝트가 하나 끝났습니다....한잔하러 갑니다. [4] 고도리 2012-12-11 3087
1739 [2013년 CES]에 이번에 구경꾼으로 참가하게 되었네요...^^ [6] 고도리 2012-12-06 2942
1738 새로운 $69 쿼드코어 보드 소개 [11] 이제현 2012-12-03 8239
1737 ARM Ubuntu 듀얼 모니터 설정 방법 이제현 2012-11-28 3391
1736 [Exynos5250] Arndale board 커널 작업 3.7-rc5 고도리 2012-11-16 4956
1735 [ArndaleBoard] Exynos5250 slackware for arm boot log 고도리 2012-11-02 19569
1734 Exynos-4412 User Manual (Public) version 배포 [2] 이제현 2012-10-26 3177
1733 따뜻해진다더니 계속 추운듯 ㅋ [1] 달중이 2012-10-25 2643
1732 토미님.....게시물 제가 삭제했습니다. - 쪽지 확인 후 고도리 2012-10-05 2702
1731 Qt 개발자 스터디 모임 진행 김대진^^ 2012-10-04 2937

사용자 로그인