C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[60101] YUV데이터를 Surface에 쓸때 CPU를 줄이는 방법이 있을까요 ?
경호 [ansoni19] 1385 읽음    2010-02-01 21:50
안녕하세요 ?
경호입니다.

directdraw를 이용해서 화면에 동영상을 play하고 있습니다.
여기저기 최적화를 하다가 이쪽에 지식을 가지신 분들이 있으면 도움을 받을까 해서
간단하게 올려 봅니다

일단 Codec에서 YUV를 뽑아내고 있는 방식은
1. 버퍼 1개에 YUV데이터를 모두 붙여서 얻어온다.
     (Y전체 쓰고  U쓰고 V쓰고 : 일반적으로 파일에 YUV데이터를 쌓는 형태)
2. YUV를 각각의 개별버퍼를 만들어 얻어 온다
     (즉 3개의 버퍼에 개별적으로 Y와 U,V를 얻어 온다)

위쪽은 MMX 및 ASM으로 이미 최적화를 한상태 입니다.

제가 줄이고 싶은 부분은 Directdraw부분인대 즉 YUV데이터를 Surface에 쓸때 사용되는 for문을 줄일 수 있을까
하는 것입니다.

실제 사용되는 소스는
for (DWORD j=0 ; j<dwHeight/2; ++j)
{
     memmove((BYTE*)m_ddsd.lpSurface + j*m_ddsd.lPitch, pSrcData + j*dwWidth, dwWidth);
     memmove((BYTE*)m_ddsd.lpSurface + j*m_ddsd.lPitch + dwHeight/2*m_ddsd.lPitch, pSrcData + dwHeight/2*dwWidth + j*dwWidth, dwWidth);
     memmove((BYTE*)m_ddsd.lpSurface + m_ddsd.lPitch*m_ddsd.dwHeight*5/4 + j*m_ddsd.lPitch/2, pSrcData + dwWidth*dwHeight + j*dwWidth/2, dwWidth/2);
    memmove((BYTE*)m_ddsd.lpSurface + m_ddsd.lPitch*m_ddsd.dwHeight + j*m_ddsd.lPitch/2, pSrcData + dwWidth*dwHeight*5/4 + j*dwWidth/2, dwWidth/2);
}
입니다. 현재는 버퍼 하나에 쌓인 YUV데이터를 surface에 그리면서 위와 같이 처리하고 있는대
이 부분을 처리하면서 CPU부하를 적게 먹게 할 방법이 있을까요 ?

물론 위코드에서 for문 안에 있는 * / 부분은 전부 변수로 빼서 따로 계산하도록은 할것 입니다.

논리적으로나 또는 surface에 데이터를 쓸때 YUV를 따로 가지고 처리하면 부하를 적게 먹는다던지
이런 부분이 있을 수 있는지 도움을 받을 수 있으면 감사 드리겠습니다.

+ -

관련 글 리스트
60101 YUV데이터를 Surface에 쓸때 CPU를 줄이는 방법이 있을까요 ? 경호 1385 2010/02/01
60116     Re:YUV데이터를 Surface에 쓸때 CPU를 줄이는 방법이 있을까요 ? 남병철.레조 1551 2010/02/02
60105     Re:YUV데이터를 Surface에 쓸때 CPU를 줄이는 방법이 있을까요 ? Nibble 1458 2010/02/01
60110         Re:Re:YUV데이터를 Surface에 쓸때 CPU를 줄이는 방법이 있을까요 ? 경호 1205 2010/02/02
60113             Re:Re:Re:YUV데이터를 Surface에 쓸때 CPU를 줄이는 방법이 있을까요 ? Nibble 1065 2010/02/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.