Loading media/java/android/media/tv/tuner/dvr/DvrPlayback.java +1 −1 Original line number Diff line number Diff line Loading @@ -69,7 +69,7 @@ public class DvrPlayback implements AutoCloseable { */ public static final int PLAYBACK_STATUS_FULL = Constants.PlaybackStatus.SPACE_FULL; long mNativeContext; private long mNativeContext; private native int nativeAttachFilter(Filter filter); private native int nativeDetachFilter(Filter filter); Loading media/java/android/media/tv/tuner/dvr/DvrRecorder.java +1 −1 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ import android.os.ParcelFileDescriptor; */ @SystemApi public class DvrRecorder implements AutoCloseable { long mNativeContext; private long mNativeContext; private native int nativeAttachFilter(Filter filter); private native int nativeDetachFilter(Filter filter); Loading media/jni/android_media_tv_Tuner.cpp +62 −33 Original line number Diff line number Diff line Loading @@ -138,11 +138,13 @@ struct fields_t { jfieldID filterContext; jfieldID timeFilterContext; jfieldID descramblerContext; jfieldID dvrContext; jfieldID dvrRecorderContext; jfieldID dvrPlaybackContext; jmethodID frontendInitID; jmethodID filterInitID; jmethodID timeFilterInitID; jmethodID dvrInitID; jmethodID dvrRecorderInitID; jmethodID dvrPlaybackInitID; jmethodID onFrontendEventID; jmethodID onFilterStatusID; jmethodID onFilterEventID; Loading Loading @@ -1333,7 +1335,7 @@ jobject JTuner::openTimeFilter() { return timeFilterObj; } jobject JTuner::openDvr(DvrType type, int bufferSize) { jobject JTuner::openDvr(DvrType type, jlong bufferSize) { ALOGD("JTuner::openDvr"); if (mDemux == NULL) { if (openDemux() != Result::SUCCESS) { Loading @@ -1342,24 +1344,38 @@ jobject JTuner::openDvr(DvrType type, int bufferSize) { } sp<IDvr> iDvrSp; sp<DvrCallback> callback = new DvrCallback(); mDemux->openDvr(type, bufferSize, callback, [&](Result, const sp<IDvr>& dvr) { Result res; mDemux->openDvr(type, (uint32_t) bufferSize, callback, [&](Result r, const sp<IDvr>& dvr) { res = r; iDvrSp = dvr; }); if (iDvrSp == NULL) { if (res != Result::SUCCESS || iDvrSp == NULL) { return NULL; } JNIEnv *env = AndroidRuntime::getJNIEnv(); jobject dvrObj = jobject dvrObj; if (type == DvrType::RECORD) { dvrObj = env->NewObject( env->FindClass("android/media/tv/tuner/dvr/Dvr"), gFields.dvrInitID, env->FindClass("android/media/tv/tuner/dvr/DvrRecorder"), gFields.dvrRecorderInitID, mObject); sp<Dvr> dvrSp = new Dvr(iDvrSp, dvrObj); dvrSp->incStrong(dvrObj); env->SetLongField(dvrObj, gFields.dvrContext, (jlong)dvrSp.get()); env->SetLongField(dvrObj, gFields.dvrRecorderContext, (jlong)dvrSp.get()); } else { dvrObj = env->NewObject( env->FindClass("android/media/tv/tuner/dvr/DvrPlayback"), gFields.dvrPlaybackInitID, mObject); sp<Dvr> dvrSp = new Dvr(iDvrSp, dvrObj); dvrSp->incStrong(dvrObj); env->SetLongField(dvrObj, gFields.dvrPlaybackContext, (jlong)dvrSp.get()); } callback->setDvr(dvrObj); Loading Loading @@ -1883,7 +1899,11 @@ static DvrSettings getDvrSettings(JNIEnv *env, jobject settings) { } static sp<Dvr> getDvr(JNIEnv *env, jobject dvr) { return (Dvr *)env->GetLongField(dvr, gFields.dvrContext); bool isRecorder = env->IsInstanceOf(dvr, env->FindClass("android/media/tv/tuner/dvr/DvrRecorder")); jfieldID fieldId = isRecorder ? gFields.dvrRecorderContext : gFields.dvrPlaybackContext; return (Dvr *)env->GetLongField(dvr, fieldId); } static void android_media_tv_Tuner_native_init(JNIEnv *env) { Loading Loading @@ -1924,9 +1944,13 @@ static void android_media_tv_Tuner_native_init(JNIEnv *env) { gFields.descramblerInitID = env->GetMethodID(descramblerClazz, "<init>", "()V"); jclass dvrClazz = env->FindClass("android/media/tv/tuner/dvr/Dvr"); gFields.dvrContext = env->GetFieldID(dvrClazz, "mNativeContext", "J"); gFields.dvrInitID = env->GetMethodID(dvrClazz, "<init>", "()V"); jclass dvrRecorderClazz = env->FindClass("android/media/tv/tuner/dvr/DvrRecorder"); gFields.dvrRecorderContext = env->GetFieldID(dvrRecorderClazz, "mNativeContext", "J"); gFields.dvrRecorderInitID = env->GetMethodID(dvrRecorderClazz, "<init>", "()V"); jclass dvrPlaybackClazz = env->FindClass("android/media/tv/tuner/dvr/DvrPlayback"); gFields.dvrPlaybackContext = env->GetFieldID(dvrPlaybackClazz, "mNativeContext", "J"); gFields.dvrPlaybackInitID = env->GetMethodID(dvrPlaybackClazz, "<init>", "()V"); jclass linearBlockClazz = env->FindClass("android/media/MediaCodec$LinearBlock"); gFields.linearBlockInitID = env->GetMethodID(linearBlockClazz, "<init>", "()V"); Loading Loading @@ -2654,13 +2678,15 @@ static int android_media_tv_Tuner_close_descrambler(JNIEnv, jobject) { } static jobject android_media_tv_Tuner_open_dvr_recorder( JNIEnv* /* env */, jobject /* thiz */, jlong /* bufferSize */) { return NULL; JNIEnv* env, jobject thiz, jlong bufferSize) { sp<JTuner> tuner = getTuner(env, thiz); return tuner->openDvr(DvrType::RECORD, bufferSize); } static jobject android_media_tv_Tuner_open_dvr_playback( JNIEnv* /* env */, jobject /* thiz */, jlong /* bufferSize */) { return NULL; JNIEnv* env, jobject thiz, jlong bufferSize) { sp<JTuner> tuner = getTuner(env, thiz); return tuner->openDvr(DvrType::PLAYBACK, bufferSize); } static jobject android_media_tv_Tuner_get_demux_caps(JNIEnv*, jobject) { Loading Loading @@ -2714,11 +2740,13 @@ static int android_media_tv_Tuner_configure_dvr(JNIEnv *env, jobject dvr, jobjec } static int android_media_tv_Tuner_start_dvr(JNIEnv *env, jobject dvr) { sp<IDvr> dvrSp = getDvr(env, dvr)->getIDvr(); if (dvrSp == NULL) { ALOGD("Failed to start dvr: dvr not found"); return false; } Result result = dvrSp->start(); return (int) result; } Loading Loading @@ -2968,7 +2996,7 @@ static const JNINativeMethod gDescramblerMethods[] = { { "nativeClose", "()I", (void *)android_media_tv_Tuner_close_descrambler }, }; static const JNINativeMethod gDvrMethods[] = { static const JNINativeMethod gDvrRecorderMethods[] = { { "nativeAttachFilter", "(Landroid/media/tv/tuner/filter/Filter;)I", (void *)android_media_tv_Tuner_attach_filter }, { "nativeDetachFilter", "(Landroid/media/tv/tuner/filter/Filter;)I", Loading @@ -2980,14 +3008,22 @@ static const JNINativeMethod gDvrMethods[] = { { "nativeFlushDvr", "()I", (void *)android_media_tv_Tuner_flush_dvr }, { "nativeClose", "()I", (void *)android_media_tv_Tuner_close_dvr }, { "nativeSetFileDescriptor", "(I)V", (void *)android_media_tv_Tuner_dvr_set_fd }, }; static const JNINativeMethod gDvrRecorderMethods[] = { { "nativeWrite", "(J)J", (void *)android_media_tv_Tuner_write_dvr }, { "nativeWrite", "([BJJ)J", (void *)android_media_tv_Tuner_write_dvr_to_array }, }; static const JNINativeMethod gDvrPlaybackMethods[] = { { "nativeAttachFilter", "(Landroid/media/tv/tuner/filter/Filter;)I", (void *)android_media_tv_Tuner_attach_filter }, { "nativeDetachFilter", "(Landroid/media/tv/tuner/filter/Filter;)I", (void *)android_media_tv_Tuner_detach_filter }, { "nativeConfigureDvr", "(Landroid/media/tv/tuner/dvr/DvrSettings;)I", (void *)android_media_tv_Tuner_configure_dvr }, { "nativeStartDvr", "()I", (void *)android_media_tv_Tuner_start_dvr }, { "nativeStopDvr", "()I", (void *)android_media_tv_Tuner_stop_dvr }, { "nativeFlushDvr", "()I", (void *)android_media_tv_Tuner_flush_dvr }, { "nativeClose", "()I", (void *)android_media_tv_Tuner_close_dvr }, { "nativeSetFileDescriptor", "(I)V", (void *)android_media_tv_Tuner_dvr_set_fd }, { "nativeRead", "(J)J", (void *)android_media_tv_Tuner_read_dvr }, { "nativeRead", "([BJJ)J", (void *)android_media_tv_Tuner_read_dvr_from_array }, }; Loading Loading @@ -3027,13 +3063,6 @@ static bool register_android_media_tv_Tuner(JNIEnv *env) { ALOGE("Failed to register descrambler native methods"); return false; } if (AndroidRuntime::registerNativeMethods( env, "android/media/tv/tuner/dvr/Dvr", gDvrMethods, NELEM(gDvrMethods)) != JNI_OK) { ALOGE("Failed to register dvr native methods"); return false; } if (AndroidRuntime::registerNativeMethods( env, "android/media/tv/tuner/dvr/DvrRecorder", gDvrRecorderMethods, Loading media/jni/android_media_tv_Tuner.h +1 −1 Original line number Diff line number Diff line Loading @@ -184,7 +184,7 @@ struct JTuner : public RefBase { jobject openFilter(DemuxFilterType type, int bufferSize); jobject openTimeFilter(); jobject openDescrambler(); jobject openDvr(DvrType type, int bufferSize); jobject openDvr(DvrType type, jlong bufferSize); protected: Result openDemux(); Loading Loading
media/java/android/media/tv/tuner/dvr/DvrPlayback.java +1 −1 Original line number Diff line number Diff line Loading @@ -69,7 +69,7 @@ public class DvrPlayback implements AutoCloseable { */ public static final int PLAYBACK_STATUS_FULL = Constants.PlaybackStatus.SPACE_FULL; long mNativeContext; private long mNativeContext; private native int nativeAttachFilter(Filter filter); private native int nativeDetachFilter(Filter filter); Loading
media/java/android/media/tv/tuner/dvr/DvrRecorder.java +1 −1 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ import android.os.ParcelFileDescriptor; */ @SystemApi public class DvrRecorder implements AutoCloseable { long mNativeContext; private long mNativeContext; private native int nativeAttachFilter(Filter filter); private native int nativeDetachFilter(Filter filter); Loading
media/jni/android_media_tv_Tuner.cpp +62 −33 Original line number Diff line number Diff line Loading @@ -138,11 +138,13 @@ struct fields_t { jfieldID filterContext; jfieldID timeFilterContext; jfieldID descramblerContext; jfieldID dvrContext; jfieldID dvrRecorderContext; jfieldID dvrPlaybackContext; jmethodID frontendInitID; jmethodID filterInitID; jmethodID timeFilterInitID; jmethodID dvrInitID; jmethodID dvrRecorderInitID; jmethodID dvrPlaybackInitID; jmethodID onFrontendEventID; jmethodID onFilterStatusID; jmethodID onFilterEventID; Loading Loading @@ -1333,7 +1335,7 @@ jobject JTuner::openTimeFilter() { return timeFilterObj; } jobject JTuner::openDvr(DvrType type, int bufferSize) { jobject JTuner::openDvr(DvrType type, jlong bufferSize) { ALOGD("JTuner::openDvr"); if (mDemux == NULL) { if (openDemux() != Result::SUCCESS) { Loading @@ -1342,24 +1344,38 @@ jobject JTuner::openDvr(DvrType type, int bufferSize) { } sp<IDvr> iDvrSp; sp<DvrCallback> callback = new DvrCallback(); mDemux->openDvr(type, bufferSize, callback, [&](Result, const sp<IDvr>& dvr) { Result res; mDemux->openDvr(type, (uint32_t) bufferSize, callback, [&](Result r, const sp<IDvr>& dvr) { res = r; iDvrSp = dvr; }); if (iDvrSp == NULL) { if (res != Result::SUCCESS || iDvrSp == NULL) { return NULL; } JNIEnv *env = AndroidRuntime::getJNIEnv(); jobject dvrObj = jobject dvrObj; if (type == DvrType::RECORD) { dvrObj = env->NewObject( env->FindClass("android/media/tv/tuner/dvr/Dvr"), gFields.dvrInitID, env->FindClass("android/media/tv/tuner/dvr/DvrRecorder"), gFields.dvrRecorderInitID, mObject); sp<Dvr> dvrSp = new Dvr(iDvrSp, dvrObj); dvrSp->incStrong(dvrObj); env->SetLongField(dvrObj, gFields.dvrContext, (jlong)dvrSp.get()); env->SetLongField(dvrObj, gFields.dvrRecorderContext, (jlong)dvrSp.get()); } else { dvrObj = env->NewObject( env->FindClass("android/media/tv/tuner/dvr/DvrPlayback"), gFields.dvrPlaybackInitID, mObject); sp<Dvr> dvrSp = new Dvr(iDvrSp, dvrObj); dvrSp->incStrong(dvrObj); env->SetLongField(dvrObj, gFields.dvrPlaybackContext, (jlong)dvrSp.get()); } callback->setDvr(dvrObj); Loading Loading @@ -1883,7 +1899,11 @@ static DvrSettings getDvrSettings(JNIEnv *env, jobject settings) { } static sp<Dvr> getDvr(JNIEnv *env, jobject dvr) { return (Dvr *)env->GetLongField(dvr, gFields.dvrContext); bool isRecorder = env->IsInstanceOf(dvr, env->FindClass("android/media/tv/tuner/dvr/DvrRecorder")); jfieldID fieldId = isRecorder ? gFields.dvrRecorderContext : gFields.dvrPlaybackContext; return (Dvr *)env->GetLongField(dvr, fieldId); } static void android_media_tv_Tuner_native_init(JNIEnv *env) { Loading Loading @@ -1924,9 +1944,13 @@ static void android_media_tv_Tuner_native_init(JNIEnv *env) { gFields.descramblerInitID = env->GetMethodID(descramblerClazz, "<init>", "()V"); jclass dvrClazz = env->FindClass("android/media/tv/tuner/dvr/Dvr"); gFields.dvrContext = env->GetFieldID(dvrClazz, "mNativeContext", "J"); gFields.dvrInitID = env->GetMethodID(dvrClazz, "<init>", "()V"); jclass dvrRecorderClazz = env->FindClass("android/media/tv/tuner/dvr/DvrRecorder"); gFields.dvrRecorderContext = env->GetFieldID(dvrRecorderClazz, "mNativeContext", "J"); gFields.dvrRecorderInitID = env->GetMethodID(dvrRecorderClazz, "<init>", "()V"); jclass dvrPlaybackClazz = env->FindClass("android/media/tv/tuner/dvr/DvrPlayback"); gFields.dvrPlaybackContext = env->GetFieldID(dvrPlaybackClazz, "mNativeContext", "J"); gFields.dvrPlaybackInitID = env->GetMethodID(dvrPlaybackClazz, "<init>", "()V"); jclass linearBlockClazz = env->FindClass("android/media/MediaCodec$LinearBlock"); gFields.linearBlockInitID = env->GetMethodID(linearBlockClazz, "<init>", "()V"); Loading Loading @@ -2654,13 +2678,15 @@ static int android_media_tv_Tuner_close_descrambler(JNIEnv, jobject) { } static jobject android_media_tv_Tuner_open_dvr_recorder( JNIEnv* /* env */, jobject /* thiz */, jlong /* bufferSize */) { return NULL; JNIEnv* env, jobject thiz, jlong bufferSize) { sp<JTuner> tuner = getTuner(env, thiz); return tuner->openDvr(DvrType::RECORD, bufferSize); } static jobject android_media_tv_Tuner_open_dvr_playback( JNIEnv* /* env */, jobject /* thiz */, jlong /* bufferSize */) { return NULL; JNIEnv* env, jobject thiz, jlong bufferSize) { sp<JTuner> tuner = getTuner(env, thiz); return tuner->openDvr(DvrType::PLAYBACK, bufferSize); } static jobject android_media_tv_Tuner_get_demux_caps(JNIEnv*, jobject) { Loading Loading @@ -2714,11 +2740,13 @@ static int android_media_tv_Tuner_configure_dvr(JNIEnv *env, jobject dvr, jobjec } static int android_media_tv_Tuner_start_dvr(JNIEnv *env, jobject dvr) { sp<IDvr> dvrSp = getDvr(env, dvr)->getIDvr(); if (dvrSp == NULL) { ALOGD("Failed to start dvr: dvr not found"); return false; } Result result = dvrSp->start(); return (int) result; } Loading Loading @@ -2968,7 +2996,7 @@ static const JNINativeMethod gDescramblerMethods[] = { { "nativeClose", "()I", (void *)android_media_tv_Tuner_close_descrambler }, }; static const JNINativeMethod gDvrMethods[] = { static const JNINativeMethod gDvrRecorderMethods[] = { { "nativeAttachFilter", "(Landroid/media/tv/tuner/filter/Filter;)I", (void *)android_media_tv_Tuner_attach_filter }, { "nativeDetachFilter", "(Landroid/media/tv/tuner/filter/Filter;)I", Loading @@ -2980,14 +3008,22 @@ static const JNINativeMethod gDvrMethods[] = { { "nativeFlushDvr", "()I", (void *)android_media_tv_Tuner_flush_dvr }, { "nativeClose", "()I", (void *)android_media_tv_Tuner_close_dvr }, { "nativeSetFileDescriptor", "(I)V", (void *)android_media_tv_Tuner_dvr_set_fd }, }; static const JNINativeMethod gDvrRecorderMethods[] = { { "nativeWrite", "(J)J", (void *)android_media_tv_Tuner_write_dvr }, { "nativeWrite", "([BJJ)J", (void *)android_media_tv_Tuner_write_dvr_to_array }, }; static const JNINativeMethod gDvrPlaybackMethods[] = { { "nativeAttachFilter", "(Landroid/media/tv/tuner/filter/Filter;)I", (void *)android_media_tv_Tuner_attach_filter }, { "nativeDetachFilter", "(Landroid/media/tv/tuner/filter/Filter;)I", (void *)android_media_tv_Tuner_detach_filter }, { "nativeConfigureDvr", "(Landroid/media/tv/tuner/dvr/DvrSettings;)I", (void *)android_media_tv_Tuner_configure_dvr }, { "nativeStartDvr", "()I", (void *)android_media_tv_Tuner_start_dvr }, { "nativeStopDvr", "()I", (void *)android_media_tv_Tuner_stop_dvr }, { "nativeFlushDvr", "()I", (void *)android_media_tv_Tuner_flush_dvr }, { "nativeClose", "()I", (void *)android_media_tv_Tuner_close_dvr }, { "nativeSetFileDescriptor", "(I)V", (void *)android_media_tv_Tuner_dvr_set_fd }, { "nativeRead", "(J)J", (void *)android_media_tv_Tuner_read_dvr }, { "nativeRead", "([BJJ)J", (void *)android_media_tv_Tuner_read_dvr_from_array }, }; Loading Loading @@ -3027,13 +3063,6 @@ static bool register_android_media_tv_Tuner(JNIEnv *env) { ALOGE("Failed to register descrambler native methods"); return false; } if (AndroidRuntime::registerNativeMethods( env, "android/media/tv/tuner/dvr/Dvr", gDvrMethods, NELEM(gDvrMethods)) != JNI_OK) { ALOGE("Failed to register dvr native methods"); return false; } if (AndroidRuntime::registerNativeMethods( env, "android/media/tv/tuner/dvr/DvrRecorder", gDvrRecorderMethods, Loading
media/jni/android_media_tv_Tuner.h +1 −1 Original line number Diff line number Diff line Loading @@ -184,7 +184,7 @@ struct JTuner : public RefBase { jobject openFilter(DemuxFilterType type, int bufferSize); jobject openTimeFilter(); jobject openDescrambler(); jobject openDvr(DvrType type, int bufferSize); jobject openDvr(DvrType type, jlong bufferSize); protected: Result openDemux(); Loading