기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

안녕하세요.

맨땅에 헤딩하고 있는 사람입니다.^^;


오드로이드 사용해서 안드로이드 위에서가 아닌 리눅스상에서 카메라 녹화를 하고자 합니다.

진행이 뜻대로 되지 않아 문의드립니다.ㅜㅜ


안드로이드 소스 중에 인코딩하는 곳을 찾으니 

SsbSipMfcEncAPI.c 라고 있더군요. 버퍼를 설정하고 인코딩을 해서 다시 받을 수 있게 하드웨어를 동작해켜주는 부분인거 같습니다.


이 코드를 SEC_OMX_H264enc.c 에서 사용하더군요. 

초기화를 하고, 버퍼를 정해주고, 인코딩을 하고...


이 소스 및 연결된 다른 소스를 살펴보며 테스르를 하고 있는데 아~ 잘 안됩니다.


테스트 방법은 640x480 YUV 422 영상 하나를 반복하여 인코딩 시켜서 저장한 후 

H264파일을 재생가능한 파일로 변환(변환프로그램사용)시켜서 재생시켜봤습니다.


H264파일의 시작이 001로 시작하고 프레임수도 제가 반복해서 저장한 수랑 동일합니다.

뭔가 저장이 된듯한데 영상은 완전히 알아볼수 없는 실제 영상과 전혀 다른 영상이 나옵니다. 그냥 쓰레기영상.


s5pc110의 SsbSipMfcEncAPI를 사용해보신분 계시면 도움좀 얻을 수 있을까요?


초기화시 각종 파라미터는 다음과 같이 넣었습니다.


    pH264Arg->codecType = H264_ENC;

    pH264Arg->SourceWidth = 640;

    pH264Arg->SourceHeight = 480;

    pH264Arg->IDRPeriod = 60;

    pH264Arg->SliceMode = 0;

    pH264Arg->RandomIntraMBRefresh = 0;

    pH264Arg->Bitrate = 64000;

    pH264Arg->QSCodeMax = 30;

    pH264Arg->QSCodeMin = 10;

    pH264Arg->PadControlOn = 0;             // 0: disable, 1: enable

    pH264Arg->LumaPadVal = 0;

    pH264Arg->CbPadVal = 0;

    pH264Arg->CrPadVal = 0;


    pH264Arg->ProfileIDC = 0; 

    pH264Arg->LevelIDC = 40;

    pH264Arg->FrameRate = 25;

    pH264Arg->SliceArgument = 0;  

    pH264Arg->NumberBFrames = 0; 

    pH264Arg->NumberReferenceFrames = 1;

    pH264Arg->NumberRefForPframes = 1;

    pH264Arg->LoopFilterDisable = 1;    // 1: Loop Filter Disable, 0: Filter Enable

    pH264Arg->LoopFilterAlphaC0Offset = 0;

    pH264Arg->LoopFilterBetaOffset = 0;

    pH264Arg->SymbolMode = 0;         // 0: CAVLC, 1: CABAC

    pH264Arg->PictureInterlace = 0;

    pH264Arg->Transform8x8Mode = 0;         // 0: 4x4, 1: allow 8x8

    pH264Arg->DarkDisable = 1;

    pH264Arg->SmoothDisable = 1;

    pH264Arg->StaticDisable = 1;

    pH264Arg->ActivityDisable = 1;


    pH264Arg->FrameQp = 20; //pVideoEnc->quantization.nQpI;

    pH264Arg->FrameQp_P = 20; //pVideoEnc->quantization.nQpP;

    pH264Arg->FrameQp_B = 20; //pVideoEnc->quantization.nQpB;


    // Android default

    pH264Arg->EnableFRMRateControl = 0; // 0: Disable, 1: Frame level RC

    pH264Arg->EnableMBRateControl  = 0; // 0: Disable, 1:MB level RC

    pH264Arg->CBRPeriodRf  = 100;




버퍼 설정 할 때 원본 소스가 들어가는 InputData의 buffer에는 YUV 422 버퍼를 그대로 복사했습니다.

그런형식으로 들어가는 것이 맞는지.. 

혹시나 해서 참고하는 소스 파일 첨부합니다.


DragonRecord.cpp 가 제가 테스트 중인 파일이며

SsbSipMfcEncAPI.c가 호출해서 사용하는 API

SEC_OMX_H264enc.c가 참고하고 있는 소스입니다.

cam_640x480.yuv는 읽어들여서 인코딩하고자 하는 파일입니다.

cam_640x480.avi는 변환된 결과 입니다.


관련하여 도움말씀 주실분 계시면 감사하겠습니다.ㅜㅜ


ikari

2012.04.04 04:36:02
*.15.203.105

아마 원본 영상을 NV12로 변환시키신후, Y데이터와 CbCr 데이터를 각각의 해당하는 주소에 넣어주셔야 될겁니다..

동영상 인코더에서는 NV12/NV12T(NV12 포멧을 삼성측에서 변형시킨 겁니다)만 지원됩니다.

고도리

2012.04.04 07:39:27
*.200.239.234

ikari님 말씀처럼 NV12 Tiled format으로 아마도 집어 넣어야 될 듯 합니다(c110서부터는).

블루스카이

2012.04.04 09:13:11
*.54.174.151

쪽지로 메일 주소 보내 주시면 참고하실 수 있는 소스 보내드리겠습니다.

그리고 S3C6410 Resource에 있는 Multimedia_DD file도 참고 하세요. 그거 보시면 사용법에 대한 윤곽이 잡히실 겁니다.

profile

차차호드

2012.04.04 18:59:25
*.166.128.172

아 답변 감사합니다. 2주째 막막하게 있었는데 찾아볼 힌트가 생겨서 좋습니다.!

NV12 관련된것을 찾아봐야겠군요! 

블루스카이님 쪽지 드릴께요^^~ 감사합니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수sort

guichan용 예제와 makefile 부탁합니다. [3]

Ramdisk 올리기 질문입니다 (용량문제) [3]

  • 추성
  • 2006-04-25
  • 조회 수 1479

s3c6410 칩에서 u-boot 상에서 사운드 출력이 가능한가요? [6]

[질문]갤탭에서 전면부 카메라 Open 방법 ?? [1]

aesop board ramdisk 올리기 문제 질문 입니다. [2]

24bit lcd 출력에 관한질문입니다. [2]

삼성 커널소스 더이상 공개 안하나요? [2]

[코드바이저가격] [1]

bootp 설치 관련 질문 드립니다. [1]

build.prop 생성방법이 궁금합니다. [1]

  • yama
  • 2012-03-04
  • 조회 수 1475

리눅스에서 USB 통신시 드라이버 문의입니다. [1]

  • seuny
  • 2013-01-11
  • 조회 수 1475

static 라이브러리 파일만들어서 빌드하는데 문제가 있어서 질문드립니... [2]

  • ice179
  • 2014-03-27
  • 조회 수 1475

[질문] SDL + Mplayer [1]

[arndaleboard]EnterpriseUbuntuServer [7]

  • monad
  • 2013-01-10
  • 조회 수 1474

SD/MMC 모듈 올린후<=[완료] [5]

wifi direct(wifi p2p)에서 채널별 감도 측정 방법 있을까요? [3]

udhcpc 에서 ip 못 받는 문제 [2]

android daemon 관련 문의드려요. [3]

  • Pelcos
  • 2011-11-17
  • 조회 수 1471

Origin Board LCD 쪽보드 회로도 [2]

mtd partition을 보드 셋업 코드에서 어떻게 나누는 것이 맞는 것... file [4]

사용자 로그인