2013-04-21 10 views

risposta

11

Se l'obiettivo è quello di decodificare un H.264 stream elementare, allora il codice dovrà garantire che il flusso viene estratto, il codec-specific-data viene fornito al codec che è principalmente SPS e PPS dati e frame di dati insieme con timestamp è fornito al codec. In tutte le versioni Android, l'interfaccia più comune sarebbe OMXCodec che è un'astrazione su un componente OMX sottostante.

In Gingerbread (Android 2.3) e ICS (Android 4.0.0), se si desidera creare un decodificatore, il metodo migliore sarebbe quello di creare un componente OMXCodec e di astrarre il codice tramite un'interfaccia MediaSource ovvero il proprio codice wrapper è modellato come MediaSource e OMXCodeclegge da questa origine ed esegue la decodifica.

Link Android creazione decoder 2.3 Video: http://androidxref.com/2.3.6/xref/frameworks/base/media/libstagefright/AwesomePlayer.cpp#1094

link ad Android 4.0.0 creazione decoder video: http://androidxref.com/4.0.4/xref/frameworks/base/media/libstagefright/AwesomePlayer.cpp#1474

Le sfide principali sarebbe la seguente:

  1. modello l'ingresso come MediaSource.

  2. Leggere un codice wrapper per leggere il buffer dal codec e gestirlo e rilasciarlo nuovamente sul codec.

Per semplificare, si potrebbe cercare stagefright riga di comando codice eseguibile come in http://androidxref.com/4.0.4/xref/frameworks/base/cmds/stagefright/stagefright.cpp#233

Tuttavia, se il programma si basa su Jellybean (4.1.x Android, 4.2.x) in poi, allora questi sono un po ' più semplificato. Dal tuo codice JNI, potresti creare un componente MediaCodec e impiegare lo stesso per la decodifica. Per integrare lo stesso nel tuo programma, puoi fare riferimento all'implementazione SimplePlayer come in http://androidxref.com/4.2.2_r1/xref/frameworks/av/cmds/stagefright/SimplePlayer.cpp#316

+0

Ho usato il video di decodifica dell'hardware libstagefright su Android, imitatore principale AwesomePlayer.cpp, invoco OMXCodec, è ok su Android 4.0, ma su Android 4.1, è schermo nero, hai qualche suguest? – crossle

+0

@CrossleSong In 'Android 4.1', ad esempio' JellyBean', la pipeline del display ha subito alcuni miglioramenti significativi. Potete per favore condividere alcuni registri per ulteriori analisi? Consiglierei di accedere dai moduli 'SurfaceTexture',' HwComposer' e 'Layer'. Una nota a margine: il tuo 'layer' è contrassegnato come sicuro per qualche motivo? – Ganesh

+0

Grazie della risposta. Ho risolto questo problema, perché il problema di ANativeWindow. mancanza di native_window_set_scaling_mode (mNativeWindow.get(), mVideoScalingMode); – crossle

Problemi correlati