This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

H.264 on Omap

Dear Experts,

 

I have built h.264 decoder for OMAP, one is built by cross-compiler to generate a .exe file, and the other is built by CE to generate a .x64P file.

Both can be run on OMAP, what is the different between two files? and which one is better regarding to performance, which is best?

 

Thank you

 

Dave

  • Those two files might be for the same "program".  With CE you can have "remote" codecs which are housed in a CE server exectuable that runs on a C64+ (the .x64P file) and are driven by an ARM application making CE VISA API calls.  The ARM application is built with knowledge of the server executable, and when you run the ARM app it loads the server exectuable and communicates with it through DSPLink or SysLink.

    However, CE can also be used for "local" codecs where the application and the codecs all run on the same processor.  That processor could be either the ARM or the DSP, there is support for both scenarios in CE.

    The "fastest" solution would be the ARM app driving the CE server on the DSP, since you have the benefit of parallel processing *and* a DSP running a codec (for which the DSP is optimized to do).

    Regards,

    - Rob

  • Thank you very much, Dear Rob,

    The information you provided to me is very helpful.

    Right now, I  have ported the FFMPEG H264 decoder into OMAP3 with CE successfully, not with cross-compiler. Since FFMPEG is the optimizied code, much better than JM code. However, I found the improvement is good, but not good enough, i.e. for QCIF(176X144), I got 75frames/s with FFMPEG running on OMAP with CE framework help while 39frames/s with JM in the same situation, as for SD (1924X768), I got 5.7frames/s based on FFMPEG while 3.5frames/s with JM code.

    Question: Any other methods can speed it up ? Thanks,

     

    Btw, I heard about that the compilers are different, when using CE framework to build the code and using general cross-compiler to build the code. With CE, the compiler is from TI. Right? would you like introduce more, thanks!

    I am looking forward your reply.

     

    BR

     

    Dave

  • dave li said:
    Right now, I  have ported the FFMPEG H264 decoder into OMAP3 with CE successfully, not with cross-compiler.

    Do you mean that you have the FFMPEG H264 decoder running on just the ARM of the OMAP3, not involving the C64+ DSP?  I'm trying to understand your comment "not with cross-compiler".

    dave li said:

    Question: Any other methods can speed it up ? Thanks,

    If you're not taking advantage of the C64+ DSP then certainly having the codec run on the DSP and be driven by an ARM app using CE would be the biggest speed up.

    If you're already using the DSP then there are general things that can be done, such as placing key data/code in on-chip RAM, and/or enabling C64+ caches if you're not already doing that.

    I don't really use codecs, I just help develop the underlying framework for running them with CE, so I'm not familiar with particular methods to make a codec run faster.

    dave li said:

    Btw, I heard about that the compilers are different, when using CE framework to build the code and using general cross-compiler to build the code. With CE, the compiler is from TI. Right? would you like introduce more, thanks!

    TI provides cross-compilers for the DSP (C64+ on OMAP3).  It's not so much a CE thing, but a processor type thing - even if you're not using CE you will use a TI compiler to generate code for the DSP.  For the ARM side of OMAP3 you can use the compiler of your choice, and for CE we typically use CodeSourcery.  CE allows you to specify the code generation tools of your choice, specified in the config.bld file.  Technically, when compiling for the ARM of OMAP3 you are using a cross-compiler, since you're running the compiler on a processor of a different type than the processor for which you're generating code (your host development system is not the OMAP3 ARM, since that is your target processor).

    Regards,

    - Rob