[android-porting] Using Existing H264 decoders

593 views
Skip to first unread message

shri

unread,
Apr 29, 2010, 5:47:38 AM4/29/10
to android-porting
Hi,
Its a newbie question. I have looked through various posts in Android-
porting and Android-platform.
I have also gone through the opencore documents in the doc folder.

I have the following requirement:

Access the H.264 decoder either directly or via OpenCore from my
application. I am not looking to playback via pvplayer.
Decode the H.264 frames (NAL) and pass the decoded frame back to my
application.

The file parsing, etc happens within my application. The decoder will
have to decode the input frame that the application provides.

Can you guide me on this?

I am unable to understand the starting point (class instance) for
accessing the H.264 codec.

Are there any documents for explaining how the Opencore components can
be used? Specifically for the use case described above. I guess, it
would be the usage of the H.264 decoder component.

thanks and regards
shriram

--
unsubscribe: android-porti...@googlegroups.com
website: http://groups.google.com/group/android-porting

Deva R

unread,
Apr 29, 2010, 1:33:27 PM4/29/10
to shri...@gmail.com, android-porting
Is it a VTC application?? curious to know the usecase..

Eclair 2.1 has minimal stagefright library, and it does 'almost'
exactly what you described below..
It reads, parses media files, sends buffer to PV OMX components (h264
inclusive), gets output buffers and frees it (does nothing in
eclair)..

To run stagefright: build stagefright (add BUILD_WITH_FULL_STAGEFRIGHT
:= true in ./buildspec.mk file and build while FS), run 'stagefright
<video-file>' to see the behavior..

Also refer the source
./frameworks/base/cmds/stagefright/stagefright.cpp
./frameworks/base/media/libstagefright/OMXCodec.cpp

No docs i've seen except source today..

-Deva

shri

unread,
Apr 30, 2010, 3:49:30 AM4/30/10
to android-porting
Hi Deva,
Thanks for the reply.
Its not a VTC usecase. Just that, my application has its own engine
and needs just the decoding part to happen outside.


I was not able to find buildspec.mk.
I saw usages of BUILD_WITH_FULL_STAGEFRIGHT - ( ifeq ($
(BUILD_WITH_FULL_STAGEFRIGHT),true) )

Am i missing anything?

- shriram

Deva R

unread,
Apr 30, 2010, 6:12:34 AM4/30/10
to shri...@gmail.com, android-porting
you can modify Android.mk so as to include libstagefright always..

i guess if you dont have a ./buildspec.mk for you platform, i guess
below generic file will come into picture..
./build/buildspec.mk.default

can you playaroud and check w that?

RaviY

unread,
May 1, 2010, 2:18:38 PM5/1/10
to android-porting
Irrespective of whether using StageFright or OpenCORE, the method of
application providing demuxed input that can be passed directly to
decoders is not available via the MediaPlayer, yet.

-Ravi

NimeshChanchani

unread,
May 19, 2010, 11:18:48 AM5/19/10
to android-porting
Has anyone tested stagefright with a video file? does it work?
once i enable all the macros how do I test stagefright player?
also what did you mean by
"
run 'stagefright
<video-file>' to see the behavior.
"

Also I saw one test app "/home/nimesh/android/frameworks/base/media/
tests/MediaFrameworkTest"

Does anyone know how to enable this test app and test the media player
using this?


On Apr 29, 10:33 pm, Deva R <r.deva...@gmail.com> wrote:
> website:http://groups.google.com/group/android-porting- Hide quoted text -
>
> - Show quoted text -

Deva R

unread,
May 19, 2010, 11:34:05 AM5/19/10
to nimeshc...@gmail.com, android-porting


>Has anyone tested stagefright with a video file? does it work?

i've tested video/audio decoding using stagefright.. it works straight away for PV OMX components, but required few fixes for our new hw codecs.


>once i enable all the macros how do I test stagefright player?
u can run below commands in android shell
'stagefright -h' will give all options.
'stagefirght <video-file>' will decode the file (no posting to overlay., decoded buffers are just free'd)
'stagefright -a <audio-file>' will decode audio file.,


>Also I saw one test app "/home/nimesh/android/frameworks/base/media/tests/MediaFrameworkTest"
>Does anyone know how to enable this test app and test the media player using this?

just build by running  'make mediaframeworktest' in your android setup.

it will generate new 'mediaframeworktest.apk' in your <out>/.../data folder.
keep it in file system., you can test various media player api calls, and video usecases by below command..,

  am instrument -e class com.android.mediaframeworktest.functional.MediaPlayerApiTest#<test-command> -w com.android.mediaframeworktest/.MediaFrameworkTestRunner

Just sure you have required file names, as specified in .\frameworks\base\media\tests\MediaFrameworkTest\src\com\android\mediaframeworktest\MediaNames.java

PS.
few of video decoding tests i ran.

am instrument -e class com.android.mediaframeworktest.functional.MediaPlayerApiTest#testLargeVideoHeigth -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
am instrument -e class com.android.mediaframeworktest.functional.MediaPlayerApiTest#testLargeVideoWidth -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
am instrument -e class com.android.mediaframeworktest.functional.MediaPlayerApiTest#testVideoMP4SeekTo -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
am instrument -e class com.android.mediaframeworktest.functional.MediaPlayerApiTest#testVideoLong3gpSeekTo -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
am instrument -e class com.android.mediaframeworktest.functional.MediaPlayerApiTest#testVideoH263AACSeekTo -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
am instrument -e class com.android.mediaframeworktest.functional.MediaPlayerApiTest#testVideoH263AMRSeekTo -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
am instrument -e class com.android.mediaframeworktest.functional.MediaPlayerApiTest#testVideoH264AACSeekTo -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
am instrument -e class com.android.mediaframeworktest.functional.MediaPlayerApiTest#testVideoH264AMRSeekTo -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
am instrument -e class com.android.mediaframeworktest.functional.MediaPlayerApiTest#testVideoWMVSeekTo -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
am instrument -e class com.android.mediaframeworktest.functional.MediaPlayerApiTest#testGetThumbnail -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
am instrument -e class com.android.mediaframeworktest.functional.MediaPlayerApiTest#testLocalH263AMRPrepareAsyncCallback -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
am instrument -e class com.android.mediaframeworktest.functional.MediaPlayerApiTest#testStreamPrepareAsyncCallback -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
am instrument -e class com.android.mediaframeworktest.functional.MediaPlayerApiTest#testStreamPrepareAsyncCallbackReset -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
am instrument -e class com.android.mediaframeworktest.performance.MediaPlayerPerformance#testH263VideoPlaybackMemoryUsage -w com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner &
am instrument -e class com.android.mediaframeworktest.performance.MediaPlayerPerformance#testH264VideoPlaybackMemoryUsage -w com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner &
am instrument -e class com.android.mediaframeworktest.performance.MediaPlayerPerformance#testWMVVideoPlaybackMemoryUsage -w com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner &
am instrument -e class com.android.mediaframeworktest.stress.MediaPlayerStressTest#testStressHWDecoderRelease -w com.android.mediaframeworktest/.MediaRecorderStressTestRunner &
am instrument -e class com.android.mediaframeworktest.stress.MediaPlayerStressTest#testStressGetCurrentPosition -w com.android.mediaframeworktest/.MediaRecorderStressTestRunner  &

NimeshChanchani

unread,
May 19, 2010, 1:04:55 PM5/19/10
to android-porting
Thx a lot dude!!

but I guess i'm having trouble with buildspec.mk .
i copied buildspec.mk.default to buildspec.mk . added
BUILD_WITH_FULL_STAGEFRIGHT. And I also changed TARGET_BUILD_TYPE to
debug.
but when i "make cleaned" and then gave
make , I got the following : .It has got TARGET_BUILD_TYPE=release
instead of debug. This makes me wonder if the changes that i did in
buildspec.mk are being effected?


============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.1-update1
TARGET_PRODUCT=generic
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=ECLAIR

On May 19, 8:34 pm, Deva R <r.deva...@gmail.com> wrote:
> >Has anyone tested stagefright with a video file? does it work?
>
> i've tested video/audio decoding using stagefright.. it works straight away
> for PV OMX components, but required few fixes for our new hw codecs.
>
> >once i enable all the macros how do I test stagefright player?
>
> u can run below commands in android shell
> 'stagefright -h' will give all options.
> 'stagefirght <video-file>' will decode the file (no posting to overlay.,
> decoded buffers are just free'd)
> 'stagefright -a <audio-file>' will decode audio file.,
>
> >Also I saw one test app
>
> "/home/nimesh/android/frameworks/base/media/tests/MediaFrameworkTest">Does anyone know how to enable this test app and test the media player
>
> using this?
>
> just build by running  'make mediaframeworktest' in your android setup.
>
> it will generate new 'mediaframeworktest.apk' in your <out>/.../data folder.
> keep it in file system., you can test various media player api calls, and
> video usecases by below command..,
>
>   am instrument -e class
> com.android.mediaframeworktest.functional.MediaPlayerApiTest#<test-command>
> -w com.android.mediaframeworktest/.MediaFrameworkTestRunner
>
> Just sure you have required file names, as specified in
> .\frameworks\base\media\tests\MediaFrameworkTest\src\com\android\mediaframe­worktest\MediaNames.java
>
> PS.
> few of video decoding tests i ran.
>
> am instrument -e class
> com.android.mediaframeworktest.functional.MediaPlayerApiTest#testLargeVideo­Heigth
> -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
> am instrument -e class
> com.android.mediaframeworktest.functional.MediaPlayerApiTest#testLargeVideo­Width
> -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
> am instrument -e class
> com.android.mediaframeworktest.functional.MediaPlayerApiTest#testVideoMP4Se­ekTo
> -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
> am instrument -e class
> com.android.mediaframeworktest.functional.MediaPlayerApiTest#testVideoLong3­gpSeekTo
> -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
> am instrument -e class
> com.android.mediaframeworktest.functional.MediaPlayerApiTest#testVideoH263A­ACSeekTo
> -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
> am instrument -e class
> com.android.mediaframeworktest.functional.MediaPlayerApiTest#testVideoH263A­MRSeekTo
> -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
> am instrument -e class
> com.android.mediaframeworktest.functional.MediaPlayerApiTest#testVideoH264A­ACSeekTo
> -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
> am instrument -e class
> com.android.mediaframeworktest.functional.MediaPlayerApiTest#testVideoH264A­MRSeekTo
> -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
> am instrument -e class
> com.android.mediaframeworktest.functional.MediaPlayerApiTest#testVideoWMVSe­ekTo
> -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
> am instrument -e class
> com.android.mediaframeworktest.functional.MediaPlayerApiTest#testGetThumbna­il
> -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
> am instrument -e class
> com.android.mediaframeworktest.functional.MediaPlayerApiTest#testLocalH263A­MRPrepareAsyncCallback
> -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
> am instrument -e class
> com.android.mediaframeworktest.functional.MediaPlayerApiTest#testStreamPrep­areAsyncCallback
> -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
> am instrument -e class
> com.android.mediaframeworktest.functional.MediaPlayerApiTest#testStreamPrep­areAsyncCallbackReset
> -w com.android.mediaframeworktest/.MediaFrameworkTestRunner &
> am instrument -e class
> com.android.mediaframeworktest.performance.MediaPlayerPerformance#testH263V­ideoPlaybackMemoryUsage
> -w com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner &
> am instrument -e class
> com.android.mediaframeworktest.performance.MediaPlayerPerformance#testH264V­ideoPlaybackMemoryUsage
> -w com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner &
> am instrument -e class
> com.android.mediaframeworktest.performance.MediaPlayerPerformance#testWMVVi­deoPlaybackMemoryUsage
> -w com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner &
> am instrument -e class
> com.android.mediaframeworktest.stress.MediaPlayerStressTest#testStressHWDec­oderRelease
> -w com.android.mediaframeworktest/.MediaRecorderStressTestRunner &
> am instrument -e class
> com.android.mediaframeworktest.stress.MediaPlayerStressTest#testStressGetCu­rrentPosition
> -w com.android.mediaframeworktest/.MediaRecorderStressTestRunner  &
>
> On Wed, May 19, 2010 at 8:48 PM, NimeshChanchani
> <nimeshchanch...@gmail.com>wrote:
> > > > unsubscribe: android-porti...@googlegroups.com<android-porting%2Bunsubscribe@­googlegroups.com>
> > > > website:http://groups.google.com/group/android-porting
>
> > > --
> > > unsubscribe: android-porti...@googlegroups.com<android-porting%2Bunsubscribe@­googlegroups.com>
> > > website:http://groups.google.com/group/android-porting-Hide quoted text
> > -
>
> > > - Show quoted text -
>
> > --
> > unsubscribe: android-porti...@googlegroups.com<android-porting%2Bunsubscribe@­googlegroups.com>

Akash Choudhari

unread,
May 19, 2010, 2:41:06 PM5/19/10
to nimeshc...@gmail.com, android-porting
Alternatively, you can try going to respective folders and do ~


~mydroid/frameworks/base/media/libstagefright$ mm BUILD_WITH_FULL_STAGEFRIGHT:=true



~/mydroid/frameworks/base/cmds/stagefright$ mm BUILD_WITH_FULL_STAGEFRIGHT:=true

- Akash

Deva R

unread,
May 19, 2010, 7:21:45 PM5/19/10
to nimeshc...@gmail.com, android-porting

if TARGET_BUILD_TYPE is already set somewhere globally, buildspec.mk ignores.. have u taken care of it? 

 ifndef TARGET_BUILD_TYPE
 #TARGET_BUILD_TYPE:=release
 #TARGET_BUILD_TYPE:=debug
 endif


not sure if it will help, 'make showcommands' gives whole dump of build commands, and u might be able to spot why its not set.,


and If your concern is whether BUILD_WITH_FULL_STAGEFRIGHT flag is effective, you can also add junk characters in source, and see if build breaks.,
Reply all
Reply to author
Forward
0 new messages