From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id BD401495AA for ; Mon, 13 May 2024 15:43:06 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 44ADC68D495; Mon, 13 May 2024 18:43:03 +0300 (EEST) Received: from glom.nmugroup.com (glom.nmugroup.com [193.183.80.6]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D80E668BECE for ; Mon, 13 May 2024 18:42:55 +0300 (EEST) Received: from localhost (localhost [127.0.0.1]) by glom.nmugroup.com (Postfix) with ESMTP id 6A472542954C for ; Mon, 13 May 2024 17:42:55 +0200 (CEST) Received: from [10.10.150.6] (unknown [134.65.164.34]) (Authenticated sender: git01) by glom.nmugroup.com (Postfix) with ESMTPSA id 3FF3D5428DE6 for ; Mon, 13 May 2024 17:42:55 +0200 (CEST) Message-ID: From: Tomas =?ISO-8859-1?Q?H=E4rdin?= To: FFmpeg development discussions and patches Date: Mon, 13 May 2024 17:42:54 +0200 Content-Type: multipart/mixed; boundary="=-Kn7+f/O5YsUuo2XtYPP1" User-Agent: Evolution 3.46.4-2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] lavc/speedhqdec: Add AV_CODEC_CAP_SLICE_THREADS 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --=-Kn7+f/O5YsUuo2XtYPP1 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On a 36 core Intel(R) Xeon(R) Platinum 8124M CPU @ 3.00GHz command: /usr/bin/time ./ffmpeg -t 30 -thread_type slice -threads $THREADS -i $INPUT.mov -vcodec rawvideo -f null - before: frame=3D 1500 fps=3D160 q=3D-0.0 Lsize=3DN/A time=3D00:00:30.00 bitrate=3DN= /A speed=3D 3.2x =20 10.54user 0.37system 0:09.40elapsed 116%CPU (0avgtext+0avgdata 175300maxresident)k -thread_type slice -threads 1 frame=3D 1500 fps=3D161 q=3D-0.0 Lsize=3DN/A time=3D00:00:30.00 bitrate=3DN= /A speed=3D3.22x =20 10.57user 0.29system 0:09.34elapsed 116%CPU (0avgtext+0avgdata 175580maxresident)k -thread_type slice -threads 2 frame=3D 1500 fps=3D318 q=3D-0.0 Lsize=3DN/A time=3D00:00:30.00 bitrate=3DN= /A speed=3D6.36x =20 10.53user 0.39system 0:04.73elapsed 230%CPU (0avgtext+0avgdata 175632maxresident)k -thread_type slice -threads 4 frame=3D 1500 fps=3D615 q=3D-0.0 Lsize=3DN/A time=3D00:00:30.00 bitrate=3DN= /A speed=3D12.3x =20 10.58user 0.34system 0:02.46elapsed 444%CPU (0avgtext+0avgdata 175452maxresident)k -thread_type slice -threads 8 frame=3D 1500 fps=3D613 q=3D-0.0 Lsize=3DN/A time=3D00:00:30.00 bitrate=3DN= /A speed=3D12.3x =20 10.60user 0.33system 0:02.46elapsed 443%CPU (0avgtext+0avgdata 180532maxresident)k ^ same as -threads 4 as we'd expect for progressive essence I don't have any interlaced samples at the moment, and speedhqenc can't make any. I also noticed speedhqenc produces broken output when width % 16 =3D=3D 8. Will file a ticket on that tomorrow. /Tomas --=-Kn7+f/O5YsUuo2XtYPP1 Content-Disposition: attachment; filename="0001-lavc-speedhqdec-Add-AV_CODEC_CAP_SLICE_THREADS.patch" Content-Type: text/x-patch; name="0001-lavc-speedhqdec-Add-AV_CODEC_CAP_SLICE_THREADS.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAyOWEwMzgwYTE1MzdiYTIwNWVjOTEzOTk1MTJmNjc2MzAxZDVlOTMwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/VG9tYXM9MjBIPUMzPUE0cmRpbj89IDxnaXRA aGFlcmRpbi5zZT4KRGF0ZTogTW9uLCAxMyBNYXkgMjAyNCAxNjozNjozMSArMDIwMApTdWJqZWN0 OiBbUEFUQ0ggMS8yXSBsYXZjL3NwZWVkaHFkZWM6IEFkZCBBVl9DT0RFQ19DQVBfU0xJQ0VfVEhS RUFEUwoKRWFjaCBmaWVsZCBzbGljZSBpcyBhc3NpZ25lZCB0byBvbmUgdGhyZWFkLgpTZXJpYWwg cGVyZm9ybWFuY2UgaXMgdW5hZmZlY3RlZC4KLS0tCiBsaWJhdmNvZGVjL3NwZWVkaHFkZWMuYyB8 IDU5ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hh bmdlZCwgMzggaW5zZXJ0aW9ucygrKSwgMjEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGli YXZjb2RlYy9zcGVlZGhxZGVjLmMgYi9saWJhdmNvZGVjL3NwZWVkaHFkZWMuYwppbmRleCBkNmIx ZmZmN2E1Li43N2ExNTlmN2U1IDEwMDY0NAotLS0gYS9saWJhdmNvZGVjL3NwZWVkaHFkZWMuYwor KysgYi9saWJhdmNvZGVjL3NwZWVkaHFkZWMuYwpAQCAtNTgsNiArNTgsOCBAQCB0eXBlZGVmIHN0 cnVjdCBTSFFDb250ZXh0IHsKICAgICBlbnVtIHsgU0hRX1NVQlNBTVBMSU5HXzQyMCwgU0hRX1NV QlNBTVBMSU5HXzQyMiwgU0hRX1NVQlNBTVBMSU5HXzQ0NCB9CiAgICAgICAgIHN1YnNhbXBsaW5n OwogICAgIGVudW0geyBTSFFfTk9fQUxQSEEsIFNIUV9STEVfQUxQSEEsIFNIUV9EQ1RfQUxQSEEg fSBhbHBoYV90eXBlOworICAgIEFWUGFja2V0ICphdnBrdDsKKyAgICB1aW50MzJfdCBzZWNvbmRf ZmllbGRfb2Zmc2V0OwogfSBTSFFDb250ZXh0OwogCiAvKiBOT1RFOiBUaGUgZmlyc3QgZWxlbWVu dCBpcyBhbHdheXMgMTYsIHVuc2NhbGVkLiAqLwpAQCAtMjY2LDkgKzI2OCwxMCBAQCBzdGF0aWMg aW50IGRlY29kZV9zcGVlZGhxX2JvcmRlcihjb25zdCBTSFFDb250ZXh0ICpzLCBHZXRCaXRDb250 ZXh0ICpnYiwgQVZGcmFtZQogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRlY29kZV9z cGVlZGhxX2ZpZWxkKGNvbnN0IFNIUUNvbnRleHQgKnMsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50 IGJ1Zl9zaXplLCBBVkZyYW1lICpmcmFtZSwgaW50IGZpZWxkX251bWJlciwgaW50IHN0YXJ0LCBp bnQgZW5kLCBpbnQgbGluZV9zdHJpZGUpCitzdGF0aWMgaW50IGRlY29kZV9zcGVlZGhxX2ZpZWxk KGNvbnN0IFNIUUNvbnRleHQgKnMsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGJ1Zl9zaXplLCBB VkZyYW1lICpmcmFtZSwgaW50IGZpZWxkX251bWJlciwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQg bGluZV9zdHJpZGUsIGludCBzbGljZV9udW1iZXIpCiB7Ci0gICAgaW50IHJldCwgc2xpY2VfbnVt YmVyLCBzbGljZV9vZmZzZXRzWzVdOworICAgIGludCByZXQsIHgsIHksIHNsaWNlX29mZnNldHNb NV07CisgICAgdWludDMyX3Qgc2xpY2VfYmVnaW4sIHNsaWNlX2VuZDsKICAgICBpbnQgbGluZXNp emVfeSAgPSBmcmFtZS0+bGluZXNpemVbMF0gKiBsaW5lX3N0cmlkZTsKICAgICBpbnQgbGluZXNp emVfY2IgPSBmcmFtZS0+bGluZXNpemVbMV0gKiBsaW5lX3N0cmlkZTsKICAgICBpbnQgbGluZXNp emVfY3IgPSBmcmFtZS0+bGluZXNpemVbMl0gKiBsaW5lX3N0cmlkZTsKQEAgLTI4MywyMSArMjg2 LDE3IEBAIHN0YXRpYyBpbnQgZGVjb2RlX3NwZWVkaHFfZmllbGQoY29uc3QgU0hRQ29udGV4dCAq cywgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgYnVmCiAKICAgICBzbGljZV9vZmZzZXRzWzBdID0g c3RhcnQ7CiAgICAgc2xpY2Vfb2Zmc2V0c1s0XSA9IGVuZDsKLSAgICBmb3IgKHNsaWNlX251bWJl ciA9IDE7IHNsaWNlX251bWJlciA8IDQ7IHNsaWNlX251bWJlcisrKSB7CisgICAgZm9yICh4ID0g MTsgeCA8IDQ7IHgrKykgewogICAgICAgICB1aW50MzJfdCBsYXN0X29mZnNldCwgc2xpY2VfbGVu OwogCi0gICAgICAgIGxhc3Rfb2Zmc2V0ID0gc2xpY2Vfb2Zmc2V0c1tzbGljZV9udW1iZXIgLSAx XTsKKyAgICAgICAgbGFzdF9vZmZzZXQgPSBzbGljZV9vZmZzZXRzW3ggLSAxXTsKICAgICAgICAg c2xpY2VfbGVuID0gQVZfUkwyNChidWYgKyBsYXN0X29mZnNldCk7Ci0gICAgICAgIHNsaWNlX29m ZnNldHNbc2xpY2VfbnVtYmVyXSA9IGxhc3Rfb2Zmc2V0ICsgc2xpY2VfbGVuOworICAgICAgICBz bGljZV9vZmZzZXRzW3hdID0gbGFzdF9vZmZzZXQgKyBzbGljZV9sZW47CiAKLSAgICAgICAgaWYg KHNsaWNlX2xlbiA8IDMgfHwgc2xpY2Vfb2Zmc2V0c1tzbGljZV9udW1iZXJdID4gZW5kIC0gMykK KyAgICAgICAgaWYgKHNsaWNlX2xlbiA8IDMgfHwgc2xpY2Vfb2Zmc2V0c1t4XSA+IGVuZCAtIDMp CiAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKICAgICB9CiAKLSAgICBm b3IgKHNsaWNlX251bWJlciA9IDA7IHNsaWNlX251bWJlciA8IDQ7IHNsaWNlX251bWJlcisrKSB7 Ci0gICAgICAgIHVpbnQzMl90IHNsaWNlX2JlZ2luLCBzbGljZV9lbmQ7Ci0gICAgICAgIGludCB4 LCB5OwotCiAgICAgICAgIHNsaWNlX2JlZ2luID0gc2xpY2Vfb2Zmc2V0c1tzbGljZV9udW1iZXJd OwogICAgICAgICBzbGljZV9lbmQgPSBzbGljZV9vZmZzZXRzW3NsaWNlX251bWJlciArIDFdOwog CkBAIC0zOTAsMTQgKzM4OSwzNCBAQCBzdGF0aWMgaW50IGRlY29kZV9zcGVlZGhxX2ZpZWxkKGNv bnN0IFNIUUNvbnRleHQgKnMsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGJ1ZgogICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0KIAotICAgIGlmIChzLT5z dWJzYW1wbGluZyAhPSBTSFFfU1VCU0FNUExJTkdfNDQ0ICYmIChmcmFtZS0+d2lkdGggJiAxNSkp CisgICAgaWYgKHMtPnN1YnNhbXBsaW5nICE9IFNIUV9TVUJTQU1QTElOR180NDQgJiYgKGZyYW1l LT53aWR0aCAmIDE1KSAmJiBzbGljZV9udW1iZXIgPT0gMykKICAgICAgICAgcmV0dXJuIGRlY29k ZV9zcGVlZGhxX2JvcmRlcihzLCAmZ2IsIGZyYW1lLCBmaWVsZF9udW1iZXIsIGxpbmVfc3RyaWRl KTsKIAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGRlY29kZV9zbGljZV9wcm9ncmVz c2l2ZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIHZvaWQgKmFyZywgaW50IGpvYm5yLCBpbnQgdGhy ZWFkbnIpCit7CisgICAgU0hRQ29udGV4dCAqcyA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgKHZv aWQpdGhyZWFkbnI7CisKKyAgICByZXR1cm4gZGVjb2RlX3NwZWVkaHFfZmllbGQoYXZjdHgtPnBy aXZfZGF0YSwgcy0+YXZwa3QtPmRhdGEsIHMtPmF2cGt0LT5zaXplLCBhcmcsIDAsIDQsIHMtPmF2 cGt0LT5zaXplLCAxLCBqb2Jucik7Cit9CisKK3N0YXRpYyBpbnQgZGVjb2RlX3NsaWNlX2ludGVy bGFjZWQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCB2b2lkICphcmcsIGludCBqb2JuciwgaW50IHRo cmVhZG5yKQoreworICAgIFNIUUNvbnRleHQgKnMgPSBhdmN0eC0+cHJpdl9kYXRhOworICAgIGlu dCBmaWVsZF9udW1iZXIgPSBqb2JuciAvIDQ7CisgICAgaW50IHNsaWNlX251bWJlciA9IGpvYm5y ICUgNDsKKyAgICAodm9pZCl0aHJlYWRucjsKKworICAgIGlmIChmaWVsZF9udW1iZXIgPT0gMCkK KyAgICAgICAgcmV0dXJuIGRlY29kZV9zcGVlZGhxX2ZpZWxkKGF2Y3R4LT5wcml2X2RhdGEsIHMt PmF2cGt0LT5kYXRhLCBzLT5hdnBrdC0+c2l6ZSwgYXJnLCAwLCA0LCBzLT5zZWNvbmRfZmllbGRf b2Zmc2V0LCAyLCBzbGljZV9udW1iZXIpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGRlY29k ZV9zcGVlZGhxX2ZpZWxkKGF2Y3R4LT5wcml2X2RhdGEsIHMtPmF2cGt0LT5kYXRhLCBzLT5hdnBr dC0+c2l6ZSwgYXJnLCAxLCBzLT5zZWNvbmRfZmllbGRfb2Zmc2V0LCBzLT5hdnBrdC0+c2l6ZSwg Miwgc2xpY2VfbnVtYmVyKTsKK30KKwogc3RhdGljIHZvaWQgY29tcHV0ZV9xdWFudF9tYXRyaXgo aW50ICpvdXRwdXQsIGludCBxc2NhbGUpCiB7CiAgICAgaW50IGk7CkBAIC00MTEsNyArNDMwLDYg QEAgc3RhdGljIGludCBzcGVlZGhxX2RlY29kZV9mcmFtZShBVkNvZGVjQ29udGV4dCAqYXZjdHgs IEFWRnJhbWUgKmZyYW1lLAogICAgIGNvbnN0IHVpbnQ4X3QgKmJ1ZiAgID0gYXZwa3QtPmRhdGE7 CiAgICAgaW50IGJ1Zl9zaXplICAgICAgICAgPSBhdnBrdC0+c2l6ZTsKICAgICB1aW50OF90IHF1 YWxpdHk7Ci0gICAgdWludDMyX3Qgc2Vjb25kX2ZpZWxkX29mZnNldDsKICAgICBpbnQgcmV0Owog CiAgICAgaWYgKGJ1Zl9zaXplIDwgNCB8fCBhdmN0eC0+d2lkdGggPCA4IHx8IGF2Y3R4LT53aWR0 aCAlIDggIT0gMCkKQEAgLTQyOSw4ICs0NDcsOCBAQCBzdGF0aWMgaW50IHNwZWVkaHFfZGVjb2Rl X2ZyYW1lKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZGcmFtZSAqZnJhbWUsCiAKICAgICBjb21w dXRlX3F1YW50X21hdHJpeChzLT5xdWFudF9tYXRyaXgsIDEwMCAtIHF1YWxpdHkpOwogCi0gICAg c2Vjb25kX2ZpZWxkX29mZnNldCA9IEFWX1JMMjQoYnVmICsgMSk7Ci0gICAgaWYgKHNlY29uZF9m aWVsZF9vZmZzZXQgPj0gYnVmX3NpemUgLSAzKSB7CisgICAgcy0+c2Vjb25kX2ZpZWxkX29mZnNl dCA9IEFWX1JMMjQoYnVmICsgMSk7CisgICAgaWYgKHMtPnNlY29uZF9maWVsZF9vZmZzZXQgPj0g YnVmX3NpemUgLSAzKSB7CiAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwogICAg IH0KIApAQCAtNDQxLDggKzQ1OSw5IEBAIHN0YXRpYyBpbnQgc3BlZWRocV9kZWNvZGVfZnJhbWUo QVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBBVkZyYW1lICpmcmFtZSwKICAgICAgICAgcmV0dXJuIHJl dDsKICAgICB9CiAgICAgZnJhbWUtPmZsYWdzIHw9IEFWX0ZSQU1FX0ZMQUdfS0VZOworICAgIHMt PmF2cGt0ID0gYXZwa3Q7CiAKLSAgICBpZiAoc2Vjb25kX2ZpZWxkX29mZnNldCA9PSA0IHx8IHNl Y29uZF9maWVsZF9vZmZzZXQgPT0gKGJ1Zl9zaXplLTQpKSB7CisgICAgaWYgKHMtPnNlY29uZF9m aWVsZF9vZmZzZXQgPT0gNCB8fCBzLT5zZWNvbmRfZmllbGRfb2Zmc2V0ID09IChidWZfc2l6ZS00 KSkgewogICAgICAgICAvKgogICAgICAgICAgKiBPdmVybGFwcGluZyBmaXJzdCBhbmQgc2Vjb25k IGZpZWxkcyBpcyB1c2VkIHRvIHNpZ25hbAogICAgICAgICAgKiBlbmNvZGluZyBvbmx5IGEgc2lu Z2xlIGZpZWxkLiBJbiB0aGlzIGNhc2UsICJoZWlnaHQiCkBAIC00NTIsMTIgKzQ3MSwxMCBAQCBz dGF0aWMgaW50IHNwZWVkaHFfZGVjb2RlX2ZyYW1lKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZG cmFtZSAqZnJhbWUsCiAgICAgICAgICAqIGJ1dCB0aGlzIG1hdGNoZXMgdGhlIGNvbnZlbnRpb24g dXNlZCBpbiBOREksIHdoaWNoIGlzCiAgICAgICAgICAqIHRoZSBwcmltYXJ5IHVzZXIgb2YgdGhp cyB0cmljay4KICAgICAgICAgICovCi0gICAgICAgIGlmICgocmV0ID0gZGVjb2RlX3NwZWVkaHFf ZmllbGQocywgYnVmLCBidWZfc2l6ZSwgZnJhbWUsIDAsIDQsIGJ1Zl9zaXplLCAxKSkgPCAwKQor ICAgICAgICBpZiAoKHJldCA9IGF2Y3R4LT5leGVjdXRlMihhdmN0eCwgZGVjb2RlX3NsaWNlX3By b2dyZXNzaXZlLCBmcmFtZSwgTlVMTCwgNCkpIDwgMCkKICAgICAgICAgICAgIHJldHVybiByZXQ7 CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKChyZXQgPSBkZWNvZGVfc3BlZWRocV9maWVsZChz LCBidWYsIGJ1Zl9zaXplLCBmcmFtZSwgMCwgNCwgc2Vjb25kX2ZpZWxkX29mZnNldCwgMikpIDwg MCkKLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgIGlmICgocmV0ID0gZGVjb2RlX3Nw ZWVkaHFfZmllbGQocywgYnVmLCBidWZfc2l6ZSwgZnJhbWUsIDEsIHNlY29uZF9maWVsZF9vZmZz ZXQsIGJ1Zl9zaXplLCAyKSkgPCAwKQorICAgICAgICBpZiAoKHJldCA9IGF2Y3R4LT5leGVjdXRl MihhdmN0eCwgZGVjb2RlX3NsaWNlX2ludGVybGFjZWQsIGZyYW1lLCBOVUxMLCA4KSkgPCAwKQog ICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICB9CiAKQEAgLTY1Myw1ICs2NzAsNSBAQCBjb25z dCBGRkNvZGVjIGZmX3NwZWVkaHFfZGVjb2RlciA9IHsKICAgICAucHJpdl9kYXRhX3NpemUgPSBz aXplb2YoU0hRQ29udGV4dCksCiAgICAgLmluaXQgICAgICAgICAgID0gc3BlZWRocV9kZWNvZGVf aW5pdCwKICAgICBGRl9DT0RFQ19ERUNPREVfQ0Ioc3BlZWRocV9kZWNvZGVfZnJhbWUpLAotICAg IC5wLmNhcGFiaWxpdGllcyA9IEFWX0NPREVDX0NBUF9EUjEgfCBBVl9DT0RFQ19DQVBfRlJBTUVf VEhSRUFEUywKKyAgICAucC5jYXBhYmlsaXRpZXMgPSBBVl9DT0RFQ19DQVBfRFIxIHwgQVZfQ09E RUNfQ0FQX0ZSQU1FX1RIUkVBRFMgfCBBVl9DT0RFQ19DQVBfU0xJQ0VfVEhSRUFEUywKIH07Ci0t IAoyLjM5LjIKCg== --=-Kn7+f/O5YsUuo2XtYPP1 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --=-Kn7+f/O5YsUuo2XtYPP1--