User Tools

Site Tools


mpeg4

안드로이드 StageFrghit MPEG4 parctice

OMX_IL

디코더

$ mkgrep "libOMX\..*\.[Dd]ecoder"
./device/ti/zoom2/zoom2.mk:96:	libOMX.TI.Video.Decoder \
./device/ti/zoom2/zoom2.mk:115:	libOMX.TI.JPEG.decoder \
./device/ti/zoom2/zoom2.mk:118:	libOMX.TI.Video.Decoder \
./hardware/ti/omx/image/src/openmax_il/jpeg_dec/Android.mk:20:LOCAL_MODULE:= libOMX.TI.JPEG.decoder
./hardware/ti/omx/image/src/openmax_il/jpeg_dec/Android.mk:35:LOCAL_SHARED_LIBRARIES := libOMX.TI.JPEG.decoder \
./hardware/ti/omx/video/src/openmax_il/video_decode/Android.mk:34:LOCAL_MODULE:= libOMX.TI.Video.Decoder
./hardware/ti/omx/video/src/openmax_il/video_decode_ittiam/src/Android.mk:83:LOCAL_MODULE:= libOMX.TI.720P.Decoder

인코더

$ mkgrep "libOMX\..*\.[Ee]ncoder"
./device/ti/zoom2/zoom2.mk:97:	libOMX.TI.Video.encoder \
./device/ti/zoom2/zoom2.mk:103:	libOMX.TI.Video.encoder \
./device/ti/zoom2/zoom2.mk:109:	libOMX.TI.JPEG.encoder \
./hardware/ti/omx/image/src/openmax_il/jpeg_enc/Android.mk:19:LOCAL_MODULE:= libOMX.TI.JPEG.encoder
./hardware/ti/omx/image/src/openmax_il/jpeg_enc/Android.mk:33:LOCAL_SHARED_LIBRARIES := libOMX.TI.JPEG.encoder \
./hardware/ti/omx/video/src/openmax_il/video_encode_ittiam/test/Android.mk:16:        libOMX.TI.mp4.splt.Encoder \
./hardware/ti/omx/video/src/openmax_il/video_encode_ittiam/test/Android.mk:17:        libOMX.TI.h264.splt.Encoder \
./hardware/ti/omx/video/src/openmax_il/video_encode_ittiam/bin/Android.mk:7:LOCAL_MODULE := libOMX.TI.h264.splt.Encoder
./hardware/ti/omx/video/src/openmax_il/video_encode_ittiam/bin/Android.mk:19:LOCAL_MODULE := libOMX.TI.mp4.splt.Encoder
./hardware/ti/omx/video/src/openmax_il/video_encode_ittiam/bin/test_temp.mk:7:LOCAL_MODULE := libOMX.TI.mp4.splt.Encoder
./hardware/ti/omx/video/src/openmax_il/video_encode_ittiam/bin/test_temp.mk:19:LOCAL_MODULE := libOMX.TI.h264.splt.Encoder
./hardware/ti/omx/video/src/openmax_il/video_encode_ittiam/src/Android.mk:24:        libOMX.TI.mp4.splt.Encoder \
./hardware/ti/omx/video/src/openmax_il/video_encode_ittiam/src/Android.mk:25:        libOMX.TI.h264.splt.Encoder
./hardware/ti/omx/video/src/openmax_il/video_encode_ittiam/src/Android.mk:35:LOCAL_MODULE:= libOMX.TI.720P.Encoder
./hardware/ti/omx/video/src/openmax_il/video_encode/Android.mk:21:LOCAL_MODULE:= libOMX.TI.Video.encoder

인코딩시 화면 튀는 문제

비디오 레코딩 사용 소스 cmds/stagefright를 사용하면 더미를 씀으로 테스트 할 수 있다.

  • ./frameworks/base/cmds/stagefright/record.cpp
  • ./frameworks/base/cmds/stagefright/stagefright.cpp
  • ./frameworks/base/media/libmediaplayerservice/StagefrightRecorder.cpp

넥서스원 동영상

==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)
==========================================================================
==========================================================================
Opening audio decoder: [faad] AAC (MPEG2/4 Advanced Audio Coding)
FAAD: compressed input bitrate missing, assuming 128kbit/s!
AUDIO: 32000 Hz, 2 ch, s16le, 128.0 kbit/12.50% (ratio: 16000->128000)
Selected audio codec: [faad] afm: faad (FAAD AAC (MPEG-2/MPEG-4 Audio))
==========================================================================

zoom3 동영상

==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Selected video codec: [ffodivx] vfm: ffmpeg (FFmpeg MPEG-4)
==========================================================================
==========================================================================
Opening audio decoder: [faad] AAC (MPEG2/4 Advanced Audio Coding)
FAAD: compressed input bitrate missing, assuming 128kbit/s!
AUDIO: 16000 Hz, 2 ch, s16le, 128.0 kbit/25.00% (ratio: 16000->64000)
Selected audio codec: [faad] afm: faad (FAAD AAC (MPEG-2/MPEG-4 Audio))
==========================================================================

비디오 rotation 정보

* liboverlay rotation 부분에 똥싸놨음. -_-; 프로요와 비교해 똥싼 부분 찾아보자.

encode

frameworks/base/media/libstagefright/MPEG4Writer.cpp: writeCompositionMatrix()에서 받은 각도에 따른 composition matrix를 track header에 붙임.

  • FYI. mplayer, vlc에서 재생 해 보면, 각도가 적용되지 않고 센서 입력 해상도 대로 재생되드라.

파일을 까 봤을때 두번째 tkhd(비디오) + 40 offset 부터 9*4 바이트가 composition matrix 임.

decode

[~/workspace/cyanogenmod/frameworks/base/media/libstagefright]
suapapa $ git grep kKeyRotation
AwesomePlayer.cpp:                    kKeyRotation, &rotationDegrees)) {
AwesomePlayer.cpp:                        kKeyRotation, &rotationDegrees)) {
MPEG4Extractor.cpp:        mLastTrack->meta->setInt32(kKeyRotation, rotationDegrees);
MPEG4Writer.cpp:    if (!mIsAudio && params && params->findInt32(kKeyRotationDegree, &rotationDegrees)) {
StagefrightMetadataRetriever.cpp:    if (!trackMeta->findInt32(kKeyRotation, &rotationAngle)) {

AwesomePlayer 에서 frameworks/base/media/libstagefright/AwesomePlayer.cpp

        if (!strncmp("OMX.", component, 4)) {
            // Our OMX codecs allocate buffers on the media_server side
            // therefore they require a remote IOMXRenderer that knows how
            // to display them.
            mVideoRenderer = new AwesomeRemoteRenderer(
                mClient.interface()->createRenderer(
                        mISurface, component,
                        (OMX_COLOR_FORMATTYPE)format,
                        decodedWidth, decodedHeight,
                        mVideoWidth, mVideoHeight,
                        rotationDegrees));
        }
mpeg4.txt · Last modified: 2013/08/03 05:04 (external edit)