ffmpeg解码后的视频帧怎样显示出来

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ffmpeg解码后的视频帧怎样显示出来相关的知识,希望对你有一定的参考价值。

参考技术A 贴你一段代码,希望有用
[mw_shl_code=cpp,true]
static Surface* getNativeSurface(JNIEnv* env, jobject jsurface)
jclass clazz = env->FindClass("android/view/Surface");
if(clazz == NULL)
return NULL;

jfieldID field_surface = env->GetFieldID(clazz, ANDROID_VIEW_SURFACE_JNI_ID, "I");//env->GetFieldID(clazz, "mSurface", "I");
if(field_surface == NULL)
return NULL;

return (Surface *) env->GetIntField(jsurface, field_surface);


static int initBitmap(SkBitmap *bitmap, int format, int width, int height, bool allocPixels)
switch (format)
case PIXEL_FORMAT_RGBA_8888:
bitmap->setConfig(SkBitmap::kARGB_8888_Config, width, height);
break;

case PIXEL_FORMAT_RGBA_4444:
bitmap->setConfig(SkBitmap::kARGB_4444_Config, width, height);
break;

case PIXEL_FORMAT_RGB_565:
bitmap->setConfig(SkBitmap::kRGB_565_Config, width, height);
break;

case PIXEL_FORMAT_A_8:
bitmap->setConfig(SkBitmap::kA8_Config, width, height);
break;

default:
bitmap->setConfig(SkBitmap::kNo_Config, width, height);
break;


if(allocPixels)
bitmap->setIsOpaque(true);
//-- alloc array of pixels
if(!bitmap->allocPixels())
return -1;


return 0;


int AndroidSurface_register(JNIEnv* env, jobject jsurface)
__android_log_print(ANDROID_LOG_INFO, TAG, "registering video surface");

sSurface = getNativeSurface(env, jsurface);
if(sSurface == NULL)
return ANDROID_SURFACE_RESULT_JNI_EXCEPTION;


__android_log_print(ANDROID_LOG_INFO, TAG, "registered");

return ANDROID_SURFACE_RESULT_SUCCESS本回答被提问者和网友采纳

以上是关于ffmpeg解码后的视频帧怎样显示出来的主要内容,如果未能解决你的问题,请参考以下文章

视频播放器选择怎样的丢帧策略~~

理解ffmpeg中的pts,dts,time_base

ffplay源码剖析(3.2.4 + sdl2):解码

ffplay源码剖析(3.2.4 + sdl2):解码

音视频解码流程

视频编解码