1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/android/callback_android.h"
#include "base/android/jni_string.h"
#include "base/files/file_path.h"
#include "base/functional/bind.h"
#include "chrome/browser/thumbnail/generator/android/thumbnail_media_parser.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/gfx/android/java_bitmap.h"
// Must come after all headers that specialize FromJniType() / ToJniType().
#include "chrome/browser/thumbnail/generator/test_support_jni_headers/ThumbnailMediaData_jni.h"
#include "chrome/browser/thumbnail/generator/test_support_jni_headers/ThumbnailMediaParserBridge_jni.h"
using base::android::ConvertUTF8ToJavaString;
namespace {
void OnMediaParsed(ThumbnailMediaParser*,
const base::android::ScopedJavaGlobalRef<jobject> jcallback,
bool success,
chrome::mojom::MediaMetadataPtr metadata,
SkBitmap thumbnail_bitmap) {
JNIEnv* env = jni_zero::AttachCurrentThread();
DCHECK(metadata);
// Copy the thumbnail bitmap to a Java Bitmap object.
base::android::ScopedJavaLocalRef<jobject> java_bitmap;
if (!thumbnail_bitmap.isNull())
java_bitmap = gfx::ConvertToJavaBitmap(thumbnail_bitmap);
base::android::ScopedJavaLocalRef<jobject> media_data;
if (success) {
media_data = Java_ThumbnailMediaData_Constructor(
env, metadata->duration, ConvertUTF8ToJavaString(env, metadata->title),
ConvertUTF8ToJavaString(env, metadata->artist), std::move(java_bitmap));
}
base::android::RunObjectCallbackAndroid(jcallback, std::move(media_data));
}
} // namespace
// static
void JNI_ThumbnailMediaParserBridge_Parse(
JNIEnv* env,
const base::android::JavaParamRef<jstring>& jmime_type,
const base::android::JavaParamRef<jstring>& jfile_path,
const base::android::JavaParamRef<jobject>& jcallback) {
base::FilePath file_path(
base::android::ConvertJavaStringToUTF8(env, jfile_path));
std::string mime_type =
base::android::ConvertJavaStringToUTF8(env, jmime_type);
// Deletes self
ThumbnailMediaParser* parser =
ThumbnailMediaParser::Create(mime_type, file_path).release();
parser->Start(
base::BindOnce(&OnMediaParsed, base::Owned(parser),
base::android::ScopedJavaGlobalRef<jobject>(jcallback)));
}
|