Creación de codificador OMXCodec en modo HW

Estoy tratando de implementar HW-accelrated H264 codificación de vídeo en Android ICS 4.0.4. Dado que la clase MediaCodec no está disponible, tengo que usar stagefright API. Pero cuando puse el indicador de HardwareCodecsOnly , OMXCodec :: Create siempre devuelve NULL. Si llamo a OMXCodec :: findMatchingCodecs () con la bandera kHardwareCodecsOnly, tengo la siguiente lista:
– OMX.TI.DUCATI1.VIDEO.H264E
– OMX.qcom.7×30.video.encoder.avc
– OMX.qcom.video.encoder.avc
– OMX.TI.Video.encoder
– OMX.Nvidia.h264.encoder
– OMX.SEC.AVC.Encoder

Así que supongo que significa que HW-codificación soportada por hardware.

Cuando no puse banderas en OMXCodec :: Create – códec creado bien, pero supongo que está en modo de software (BTW, ¿cómo puedo comprobar que codec exactamente se creó?)

Navegando por las fuentes de OMXCodec he encontrado líneas interesantes:

if (createEncoder) { sp<MediaSource> softwareCodec = InstantiateSoftwareEncoder(componentName, source, meta); if (softwareCodec != NULL) { LOGV("Successfully allocated software codec '%s'", componentName); return softwareCodec; } } 

Parece que para Encoder siempre intenta instanciar el codec de software primero. ¿Qué estoy haciendo mal? Cualquier ayuda wil sea apreciada grandemente. Gracias

He aquí un código de creación de OMXCodec:

  mClient = new OMXClient(); mClient->connect(); logger->log("mClient.connect();"); enc_meta = new MetaData; // frame size of target video file int width = 640; //720; int height = 480; int kFramerate = 15; int kVideoBitRate = 500000; int kIFramesIntervalSec = 5; int32_t colorFormat = OMX_COLOR_FormatYUV420SemiPlanar; enc_meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_AVC); //MEDIA_MIMETYPE_VIDEO_MPEG4); //MEDIA_MIMETYPE_VIDEO_H263);//MEDIA_MIMETYPE_VIDEO_AVC); enc_meta->setInt32(kKeyWidth, width); enc_meta->setInt32(kKeyHeight, height); enc_meta->setInt32(kKeyFrameRate, kFramerate); enc_meta->setInt32(kKeySampleRate, 44100); enc_meta->setInt32(kKeyBitRate, kVideoBitRate); enc_meta->setInt32(kKeyStride, width); enc_meta->setInt32(kKeySliceHeight, height); enc_meta->setInt32(kKeyIFramesInterval, kIFramesIntervalSec); enc_meta->setInt32(kKeyColorFormat, colorFormat); mVideoSource = OMXCodec::Create( mClient->interface(), enc_meta, true, mSrc, NULL, OMXCodec::kHardwareCodecsOnly ); logger->log("OMXCodec_CREATED result: %d", (mVideoSource!=NULL) ? 1 : 0); 

En Android ICS 4.0.4 , el registro de códec era estático, es decir, todos los códecs se registraron como parte de una matriz KEncoderInfo como se puede encontrar aquí .

La metodología para diferenciar entre codecs de hardware y software es bastante simple. Si el nombre del componente no se inicia con OMX , se interpreta que es un códec de software como se muestra en el método IsSoftwareCodec .

Puesto que usted está intentando un codificador de AVC , el códec del software si creó sería AVCEncoder como se puede encontrar de él es referencia de la Factory .

Para comprobar qué codec se creó, puede habilitar los registros en el archivo OMXCodec.cpp quitando el comentario como #define LOG_NDEBUG 0 en esta línea, guárdelo y compile para crear libstagefright.so que podría ser utilizado para generar los registros en la pantalla logcat .

EDITAR:

En caso de streaming rtsp , es necesario habilitar los registros en ACodec.cpp .

Se necesita averiguar si libstagefrighthw.so está presente en /system/lib que registrará el núcleo OMX con el framework Stagefright .

  • ¿Cómo quitar la pantalla negra que apper antes de jugar el vídeo mp4?
  • imágenes de video enviadas desde el servicio web
  • Android MediaStore.ACTION_VIDEO_CAPTURE, ruta externa?
  • Android NDK. Cómo reproducir video.
  • Cómo implementar el filtro de vídeo en Android como instagram
  • ¿Cómo aplicar el filtrado de video en android?
  • Decodificación de vídeo con FFMpeg para Android
  • Reproduce dos videos en un VideoView al mismo tiempo
  • Error de "ffmpeg tiene relocalizaciones de texto" en Android
  • Reproducción de vídeo desde el servidor http en android
  • Android: Cómo compartir vídeos en la página de Facebook con Facebook SDK
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.