From patchwork Sun Mar 17 22:28:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthieu Bouron X-Patchwork-Id: 47146 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:958e:b0:1a3:31a3:7958 with SMTP id iu14csp700349pzb; Sun, 17 Mar 2024 15:31:30 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUVvNSTbrf+fZRIYgcCNhdSmYaXOnpOd2QwOnhjS+8E1kD12/+1j0BdwOUCQCl+HJQUnsjGpo3vyAPp7hLvenIxAQJsdb7YOhGK9g== X-Google-Smtp-Source: AGHT+IFzLxt9CcxAETAGTB0pHAsILPciZUCcIXZcdfc3aPAMx/cBJCSUnflWo4YazRlOloUwEvYd X-Received: by 2002:a05:6402:36f:b0:565:983d:7bbb with SMTP id s15-20020a056402036f00b00565983d7bbbmr5832536edw.14.1710714689769; Sun, 17 Mar 2024 15:31:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1710714689; cv=none; d=google.com; s=arc-20160816; b=Wdtbi3Rea/HaquVvkvqXBaE/9bxlWQdfjS2YVd1mpXg3bjtOSaSH5GPk8vDyTMFvsb VtOYNFgDsvXZ5YtNa/KhR69V2BJepXfLUPg43PUqVAmpwo9Y5hFzJvLv3MKa9E5X2uM8 6OMMvDki9dRBhTQsdNjhheTR8GjL8MUU2c74g9gqfafZhe7L8bPBLhZHvtzF4ZYM+cBQ 7dD3u2HW+bHqwYFxEBH3yuR51dRYqHenWDq2laUEvJZIRht35MhR/ry1QxREV+0b4jQA PBNWftX/rI5dGqmQTKhR2Z79al8rG/jd1eGAHqG/+pU8pxn5c10KsMzCQxxK4QiH2lob 7uuQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=9U5eMHymiaArnzB/I5wT7Sz1TjGYNMK1AbYW0iiByJs=; fh=bsOL+ub9JEnfNazRgCdgjxJAChubFVskZxBzYcxeDLU=; b=BHdFnxgHKUvHq5JG7RdJYVYPtgAG4hw+oNFTpC9XVG248tMIpC/SzFuhpAUePKS7ad rQe/9vO1vipb62nTJri+RsgiwQQW3WfLp182ZyUme/Y7VhhFlv+JSncVqdwKZSnp1VOk C9Em1c5YIKhlL2Nw2F0Xk8YVjuHu5fx/+U4fLa7s9elOXDMFALPjN9pqPA7JfuXYpiiW hyoovrt4RJtvD5iFKkzLXVTGd2y2bIedJ84psHY6asF/QYBrhNgILiK3s1d603lQOkv5 3hlbuys2+FVb7Fzz2m++1KpUOVPrNXYdpW97vK/3cSdm5gsa8e2c9rDpDRFX46+x6zKF KO6w==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=nsBuqlqB; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id b14-20020a0564021f0e00b00568f3cca3b8si626809edb.648.2024.03.17.15.31.29; Sun, 17 Mar 2024 15:31:29 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=nsBuqlqB; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9510568D20A; Mon, 18 Mar 2024 00:31:16 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B4D2268D1A6 for ; Mon, 18 Mar 2024 00:31:08 +0200 (EET) Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-41412fe2609so31055e9.1 for ; Sun, 17 Mar 2024 15:31:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710714668; x=1711319468; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=feZ6gpg0EDinKRjrxdqS51T6+YVT8WtqBVi2y06yVYs=; b=nsBuqlqBUGQp6Kn/ZEHkOlJGfeyAAltfb9HowB1FDo6KIG4mCQrLDgR6kutUtdUNqp JatWz3gMIHVm1sSGe/Y0TVV7c9w3vu/QN6ODKWSn3Y15YW+4ot5YD5xjZ9c+SG1UT+LW R5UHvI7xCeGvSBIW5ep+cjZnsUByP19N95G7CYkc7nG1Au5u85H9PkU7n2juX7yC4Tsm 1GY9nnQvIQhsXCVHk+9v5RKCZ1KED3W8S+0usr43Iv5RfivhyI/Mby6GDVxCyRwt6P7G HjkVuAKMTyRtvfkr4czEy6RrI7HjYfp8eBHxXrt1/J5GMqqFXNBq21tg7U7w1A9Osjqq aJ/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710714668; x=1711319468; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=feZ6gpg0EDinKRjrxdqS51T6+YVT8WtqBVi2y06yVYs=; b=IowTIEJFqXq1I06l+xS1QYFWpnizi0hef14nNidAWlTO2pH5ECv4vr9HbrFvZVHLg9 iW+2T1tsC+GaOpIWeAN+51upF7NgF5N4yG/fdiXNgET951VGQW2u42SUIeKYPOQlVV77 QotAiEuXnEdd8tMi2fgGeKoYUTsnZ5tIfeBD+STX6bw1P8AJwoiTe2MRDrUotn/FAaH+ NlZQ0QhazscId98UqESZ9TmQ8OKJ6iI4UrzxQEXSUdcSVh/zuM5jfIliG4mrd+kvFf9e XmJ5mEdLZ8GBDKuIOQoACt5DleHoDMMi4sIryIR79UN36JS2FbFyMnbGg80cvT0y4C5m CbLg== X-Gm-Message-State: AOJu0Yz5Sq3UK0sTii01Vjxz8KC3jDJ8meXShDMkhebVuTFrBSMbNfrs LiD2GCOaaajU7I3x4M2KaFRr/nazp0q+8Sm1SrnuocwPKDUItNCDJGGoSAvj X-Received: by 2002:a05:600c:45c6:b0:414:8e5:91f5 with SMTP id s6-20020a05600c45c600b0041408e591f5mr3322996wmo.30.1710714667704; Sun, 17 Mar 2024 15:31:07 -0700 (PDT) Received: from localhost.localdomain (2a01cb040b6872000000000000000afa.ipv6.abo.wanadoo.fr. [2a01:cb04:b68:7200::afa]) by smtp.gmail.com with ESMTPSA id g18-20020a05600c4ed200b00413f3b16a26sm12183682wmq.35.2024.03.17.15.31.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 Mar 2024 15:31:07 -0700 (PDT) From: Matthieu Bouron To: ffmpeg-devel@ffmpeg.org Date: Sun, 17 Mar 2024 23:28:32 +0100 Message-ID: <20240317223102.49414-2-matthieu.bouron@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240317223102.49414-1-matthieu.bouron@gmail.com> References: <20240227145536.281991-1-matthieu.bouron@gmail.com> <20240317223102.49414-1-matthieu.bouron@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 1/6] avcodec: add av_jni_{get, set}_android_app_ctx helper X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Matthieu Bouron Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: UxB1NYiW2qaS This will allow users to pass the Android ApplicationContext which is mandatory to retrieve the ContentResolver responsible to resolve/open Android content-uri. --- doc/APIchanges | 3 +++ libavcodec/jni.c | 42 ++++++++++++++++++++++++++++++++++++++++++ libavcodec/jni.h | 17 +++++++++++++++++ 3 files changed, 62 insertions(+) diff --git a/doc/APIchanges b/doc/APIchanges index a44c8e4f10..ae1868047e 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -2,6 +2,9 @@ The last version increases of all libraries were on 2024-03-07 API changes, most recent first: +2024-03-xx - xxxxxxxxxx - lavc 61.2.100 - jni.h + Add av_jni_set_android_app_ctx() and av_jni_get_android_app_ctx(). + 2024-03-xx - xxxxxxxxxx - lavu 59.2.100 - channel_layout.h Add AV_CHANNEL_LAYOUT_RETYPE_FLAG_CANONICAL. diff --git a/libavcodec/jni.c b/libavcodec/jni.c index ae6490de9d..cfe95bd1ec 100644 --- a/libavcodec/jni.c +++ b/libavcodec/jni.c @@ -77,3 +77,45 @@ void *av_jni_get_java_vm(void *log_ctx) } #endif + +#if defined(__ANDROID__) + +int av_jni_set_android_app_ctx(void *app_ctx, void *log_ctx) +{ +#if CONFIG_JNI + JNIEnv *env = ff_jni_get_env(log_ctx); + if (!env) + return AVERROR(EINVAL); + + jobjectRefType type = (*env)->GetObjectRefType(env, app_ctx); + if (type != JNIGlobalRefType) { + av_log(log_ctx, AV_LOG_ERROR, "Application context must be passed as a global reference"); + return AVERROR(EINVAL); + } + + pthread_mutex_lock(&lock); + android_app_ctx = app_ctx; + pthread_mutex_unlock(&lock); + + return 0; +#else + return AVERROR(ENOSYS); +#endif +} + +void *av_jni_get_android_app_ctx(void) +{ +#if CONFIG_JNI + void *ctx; + + pthread_mutex_lock(&lock); + ctx = android_app_ctx; + pthread_mutex_unlock(&lock); + + return ctx; +#else + return NULL; +#endif +} + +#endif diff --git a/libavcodec/jni.h b/libavcodec/jni.h index dd99e92611..da8025f830 100644 --- a/libavcodec/jni.h +++ b/libavcodec/jni.h @@ -43,4 +43,21 @@ int av_jni_set_java_vm(void *vm, void *log_ctx); */ void *av_jni_get_java_vm(void *log_ctx); +/* + * Set the Android application context which will be used to retrieve the Android + * content resolver to resolve content uris. + * + * @param app_ctx global JNI reference to the Android application context + * @return 0 on success, < 0 otherwise + */ +int av_jni_set_android_app_ctx(void *app_ctx, void *log_ctx); + +/* + * Get the Android application context that has been set with + * av_jni_set_android_app_ctx. + * + * @return a pointer the the Android application context + */ +void *av_jni_get_android_app_ctx(void); + #endif /* AVCODEC_JNI_H */