OpenMAX AL for ffmpeg

OpenMAX AL

  • OpenMAX Application Layer
  • Application-level multimedia playback and recording API for mobile embedded devices.
  • Device independent
  • Cross-platform interface for applications to access a devices audio, video and imaging capabilities.
  • OpenMAX AL 를 사용하면 디바이스에 독립적으로 media player/recorder를 만들 수 있다.

 

NativeMedia Sample

  • ndk/samples/nativemedia 풀더에 OpenMAX AL를 사용하여 MPEG TS 파일을 재생하는 예제가 있다.
  • 이 예제는 android.media.MediaPlayer java class 를 이용하는 방법과 native api를 사용하는 방법
  • 그리고 video sink를 일반surface를 사용하는 법과 opengl GLSurfaceview를 사용하는 예제가 들어 있다.
  • 예제를 실행하기 위해서는 풀더에 포함된 NatieMedia.ts 파일을 /sdcard/NativeMedia.ts 에 저장 되어 있어야 한다.
  • ffmpeg를 사용하여 플레이어를 만들기 위해서는 native 방법을 사용해야 한다.

 

주요 native 함수

  • createEngine() – create the engine and output mix objects
  • createStreamingMediaPlayer(String filename) – crate streaming media player
    • TS file를 open
    • image video sink 와 data source에 대한 format를 정의 하고 media player를 생성
    • 필요한 인터페이스들을 얻는다.
  • setSurface(Surface surface) – set the surface
    • ANativeWindwo_fromSurface 함수 이용 surface와 video sink를 연결
  • setPlayingStreamingMediaPlayer(boolean isPlaying) – set the playing state for the streaming media player
  • shutdown() – shut down the native media system
  • rewindStramingMediaPlayer() – rewind th streaming media player

 

XDataFormat_XXX

  • 예제에서는 XDataFormat_MIME를 사용하여 버퍼에 ts 파일을 직접 밀어 넣어 재생하였다.
  • ffmpeg에서 적용하려면 XDataFormat_RawImage를 사용하여 ffmpeg에서 디코딩한 raw 데이터를 밀어 넣으면 되지 않을까?
  • raw 데이터 처리가 된다면 OpenMAX IL 까지 보지 않아도 될것 같다.!!
  • XADataFormat_RawImage ( OpenMAX AL 1.0 SPEC Chapter 9.1.9 )
    typedef struct XADataFormat_RawImage_ {
        XAuint32 formatType;
        XAuint32 colorFormat;
        XAuint32 height;
        XAuint32 width;
        XAuint32 stride;
    } XADataFormat_RawImage;
    • Structure used to describe the raw image data:
      Field Description
      formatType The format type, which must always be XA_DATAFORMAT_RAWIMAGE for this structure.
      colorFormat Raw image color format. Refer to XA_COLORFORMAT macros.
      height Frame height (vertical) resolution.
      width Frame width (horizontal) resolution.
      stride Number of bytes in a line of the image.
    • formatType
      #define XA_DATAFORMAT_MIME              ((XAuint32) 0x00000001)
      #define XA_DATAFORMAT_PCM               ((XAuint32) 0x00000002)
      #define XA_DATAFORMAT_RAWIMAGE          ((XAuint32) 0x00000003)
    • colorFormat
      #define XA_COLORFORMAT_UNUSED                   ((XAuint32) 0x00000000)
      #define XA_COLORFORMAT_MONOCHROME               ((XAuint32) 0x00000001)
      #define XA_COLORFORMAT_8BITRGB332               ((XAuint32) 0x00000002)
      #define XA_COLORFORMAT_12BITRGB444              ((XAuint32) 0x00000003)
      #define XA_COLORFORMAT_16BITARGB4444            ((XAuint32) 0x00000004)
      #define XA_COLORFORMAT_16BITARGB1555            ((XAuint32) 0x00000005)
      #define XA_COLORFORMAT_16BITRGB565              ((XAuint32) 0x00000006)
      #define XA_COLORFORMAT_16BITBGR565              ((XAuint32) 0x00000007)
      #define XA_COLORFORMAT_18BITRGB666              ((XAuint32) 0x00000008)
      #define XA_COLORFORMAT_18BITARGB1665            ((XAuint32) 0x00000009)
      #define XA_COLORFORMAT_19BITARGB1666            ((XAuint32) 0x0000000A)
      #define XA_COLORFORMAT_24BITRGB888              ((XAuint32) 0x0000000B)
      #define XA_COLORFORMAT_24BITBGR888              ((XAuint32) 0x0000000C)
      #define XA_COLORFORMAT_24BITARGB1887            ((XAuint32) 0x0000000D)
      #define XA_COLORFORMAT_25BITARGB1888            ((XAuint32) 0x0000000E)
      #define XA_COLORFORMAT_32BITBGRA8888            ((XAuint32) 0x0000000F)
      #define XA_COLORFORMAT_32BITARGB8888            ((XAuint32) 0x00000010)
      #define XA_COLORFORMAT_YUV411PLANAR             ((XAuint32) 0x00000011)
      #define XA_COLORFORMAT_YUV420PLANAR             ((XAuint32) 0x00000013)
      #define XA_COLORFORMAT_YUV420SEMIPLANAR         ((XAuint32) 0x00000015)
      #define XA_COLORFORMAT_YUV422PLANAR             ((XAuint32) 0x00000016)
      #define XA_COLORFORMAT_YUV422SEMIPLANAR         ((XAuint32) 0x00000018)
      #define XA_COLORFORMAT_YCBYCR                   ((XAuint32) 0x00000019)
      #define XA_COLORFORMAT_YCRYCB                   ((XAuint32) 0x0000001A)
      #define XA_COLORFORMAT_CBYCRY                   ((XAuint32) 0x0000001B)
      #define XA_COLORFORMAT_CRYCBY                   ((XAuint32) 0x0000001C)
      #define XA_COLORFORMAT_YUV444INTERLEAVED        ((XAuint32) 0x0000001D)
      #define XA_COLORFORMAT_RAWBAYER8BIT             ((XAuint32) 0x0000001E)
      #define XA_COLORFORMAT_RAWBAYER10BIT            ((XAuint32) 0x0000001F)
      #define XA_COLORFORMAT_RAWBAYER8BITCOMPRESSED   ((XAuint32) 0x00000020)
      #define XA_COLORFORMAT_L2                       ((XAuint32) 0x00000021)
      #define XA_COLORFORMAT_L4                       ((XAuint32) 0x00000022)
      #define XA_COLORFORMAT_L8                       ((XAuint32) 0x00000023)
      #define XA_COLORFORMAT_L16                      ((XAuint32) 0x00000024)
      #define XA_COLORFORMAT_L24                      ((XAuint32) 0x00000025)
      #define XA_COLORFORMAT_L32                      ((XAuint32) 0x00000026)
      #define XA_COLORFORMAT_18BITBGR666              ((XAuint32) 0x00000029)
      #define XA_COLORFORMAT_24BITARGB6666            ((XAuint32) 0x0000002A)
      #define XA_COLORFORMAT_24BITABGR6666            ((XAuint32) 0x0000002B)

 

Wiki : http://howto.homelinux.com/wiki/AndroidFFMPEG#OpenMAXAL

Leave a comment