ffmpeg: libjniaudio on gingerbread
Hi, I tried to run the ffpmeg app on Galaxy S with v. 2.3.3. Issue #1 was with libjniaudio - due to change of signature of android::AudioTrack::set(). Follows my patch for audiotrack.cpp, function AndroidAudioTrack_set():
status_t ret = NAME_NOT_FOUND;
void *lptr_media = dlopen("libmedia.so", 0);
__android_log_print(ANDROID_LOG_DEBUG, TAG, "dlopen returns %p", lptr_media);
if (lptr_media) // first, try gingerbread
{
status_t (*fptr_set)(AudioTrack* track,
int streamType,
uint32_t sampleRate,
int format,
int channels,
int frameCount,
uint32_t flags,
AudioTrack::callback_t cbf,
void* user,
int notificationFrames,
const sp<IMemory>& sharedBuffer,
bool threadCanCallJava,
int sessionId);
fptr_set = (typeof fptr_set)dlsym(lptr_media, "_ZN7android10AudioTrack3setEijiiijPFviPvS1_ES1_iRKNS_2spINS_7IMemoryEEEbi");
__android_log_print(ANDROID_LOG_DEBUG, TAG, "dlsym returns %p", fptr_set);
if (fptr_set != 0)
{
ret = fptr_set(track,
streamType,
sampleRate,
format,
channels,
0, 0, 0, 0, 0, 0, 0, 0);
__android_log_print(ANDROID_LOG_DEBUG, TAG, "fptr_set() returns %d", ret);
dlclose(lptr_media);
lptr_media = 0;
}
}
if (lptr_media) // second, try froyo
{
status_t (*fptr_set)(AudioTrack* track,
int streamType,
uint32_t sampleRate,
int format,
int channels,
int frameCount,
uint32_t flags,
AudioTrack::callback_t cbf,
void* user,
int notificationFrames,
const sp<IMemory>& sharedBuffer,
bool threadCanCallJava);
fptr_set = (typeof fptr_set)dlsym(lptr_media, "_ZN7android10AudioTrack3setEijiiijPFviPvS1_ES1_iRKNS_2spINS_7IMemoryEEEb");
__android_log_print(ANDROID_LOG_INFO, TAG, "dlsym returns %p", fptr_set);
if (fptr_set != 0)
{
ret = fptr_set(track,
streamType,
sampleRate,
format,
channels,
0, 0, 0, 0, 0, 0, 0); // push max number of parameters
__android_log_print(ANDROID_LOG_INFO, TAG, "fptr_set() returns %d", ret);
dlclose(lptr_media);
lptr_media = 0;
}
}
if (lptr_media) // finally, close library anyway
{
dlclose(lptr_media);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
ffmpeg: libjnivideo on gingerbread
No milestone
No one is assigned
Hi,
I tried to run the ffpmeg app on Galaxy S with v. 2.3.3. Issue #2 was with libjnivideo - due to change of name of the native surface field in android/view/Surface class.
Follows my patch for surface.cpp, function getNativeSurface():
static Surface* getNativeSurface(JNIEnv* env, jobject jsurface) {
jclass clazz = env->FindClass("android/view/Surface");
jfieldID field_surface = env->GetFieldID(clazz, "mSurface", "I");
if(field_surface == NULL) {
#ifdef ANDROID_VIEW_SURFACE_JNI_ID // using gingerbread version of <surfaceflinger/Surface.h>
env->ExceptionClear();
field_surface = env->GetFieldID(clazz, ANDROID_VIEW_SURFACE_JNI_ID, "I");
#endif
}
if(field_surface == NULL) {
return NULL;
}
return (Surface *) env->GetIntField(jsurface, field_surface);
}
alexcohn, havlenapetr, and sunrui are participating in this issue.
sunrui commented
about 7 hours ago
hi, you should change the mSurface to mNativeSurface with under above 2.3. BTW, how to compile with neon or vfp?
havlenapetr commented
about an hour ago
yes I know, better way will be add ifdef for OS version, neon or vfp support zou must set in config.h of ffmpeg, but I think that better way is compile ffmpeg with theirs makefiles and than use this libffmpeg.so like prebuilt library in android's project