赞
踩
Mediacodec 编码过程源码解析
背景:
Mediacodec 编码过程中,会createinptsurface,然后opengl eglcontext 进行绑定,我们就从源码角度剖析整个过程
首先看下createInputSurface的过程
createInputSurface
C++ static jobject android_media_MediaCodec_createInputSurface(JNIEnv* env, jobject thiz) { ALOGV("android_media_MediaCodec_createInputSurface"); sp<JMediaCodec> codec = getMediaCodec(env, thiz); if (codec == NULL || codec->initCheck() != OK) { throwExceptionAsNecessary(env, INVALID_OPERATION); return NULL; } // Tell the MediaCodec that we want to use a Surface as input. sp<IGraphicBufferProducer> bufferProducer; status_t err = codec->createInputSurface(&bufferProducer); if (err != NO_ERROR) { throwExceptionAsNecessary(env, err); return NULL; } // Wrap the IGBP in a Java-language Surface. return android_view_Surface_createFromIGraphicBufferProducer(env, bufferProducer); } jobject android_view_Surface_createFromIGraphicBufferProducer(JNIEnv* env, const sp<IGraphicBufferProducer>& bufferProducer) { if (bufferProducer == NULL) { return NULL; } sp<Surface> surface(new Surface(bufferProducer, true)); return android_view_Surface_createFromSurface(env, surface); } jobject android_view_Surface_createFromSurface(JNIEnv* env, const sp<Surface>& surface) {