Skip to content
View in the app

A better way to browse. Learn more.

Armbian Community Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

JellyFin MMP

Featured Replies

Ok I wasnt going to say But Sandi, says Prove The Shit. Who Is Wrong....
nyanmisaka left a comment (jellyfin/jellyfin-ffmpeg#765) I am unable to reproduce the issue. jellyfin-ffmpeg is intended solely for use with the Jellyfin server. If the custom version of our MPP dependency is causing your specific problem, please build your own version using the upstream MPP. Additionally, you completely ignored the issue report template. — Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications, keep track of coding agent tasks and review pull requests on the go with GitHub Mobile for iOS and Android. Download it today! You are receiving this because you authored the thread
 

Sandi's right to push, and the honest answer is: he's right on two counts, and we have one gap I should close before we say a word back.

Where he's right:

I ignored the issue template. Factually true, entirely my fault. Their repo has one and I posted free-form.

Scope. jellyfin-ffmpeg is for the Jellyfin server. I drove their binary from a command line and said so in the issue — he's entitled to call that out of scope.

Where his reply proves nothing: "unable to reproduce" with no parameters. This needs RK3588 specifically, VP9 Profile 2 10-bit, both decoder cores, and ~65,536 frames in one continuous session. Miss any one and you see nothing. He didn't say what he ran.

And here's our gap, which I should have caught: our A/B compared their prebuilt binary (stormed at 66,083) against our build of the fork tip with the revert (clean at 73,214). Those differ by two things — the patch and the build environment. We never built the unmodified fork tip ourselves.

Closing that now.

Bash Build the unmodified fork tip as the missing control

IN

SP=/tmp/claude-1000/-home-rich-defrese-homelab-notes/16341f90-382c-4834-a9d8-ecb4f14fc419/scratchpad; export SSH_ASKPASS="$SP/askpass.sh" SSH_ASKPASS_REQUIRE=force; setsid -w ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=12 pi-desktop@192.168.1.176 'cd ~/mpp-bisect || exit 1; git checkout -q -B forkclean nyan/jellyfin-mpp-next 2>/dev/null; git reset --hard -q; echo " === MISSING CONTROL: our own build of the UNMODIFIED fork tip ==="; echo " HEAD: $(git log -1 --format="%h %s" | cut -c1-60)"; echo " fast-mode line present (fork behaviour): $(grep -c "hal_task_count = 2" mpp/hal/rkdec/vp9d/hal_vp9d_api.c 2>/dev/null)"; echo " working tree clean: $(git status --porcelain | wc -l) changes"; echo "--- CONTROL: unmodified fork tip, our toolchain" >> ~/bisect-log.txt; nohup setsid bash -c "cd ~/mpp-bisect && ~/bisect-test.sh; echo CONTROL_EXIT=\$? >> ~/bisect-log.txt" >/dev/null 2>&1 </dev/null & disown; sleep 45; echo " building..."' 2>&1 | grep -v Warning

OUT

=== MISSING CONTROL: our own build of the UNMODIFIED fork tip === HEAD: 4e5b4cfe7 fix[sys_cfg]: Do not align FBC hor_stride fast-mode line present (fork behaviour): 1 working tree clean: 0 changes building...

Bash Wait for the control result

IN

SP=/tmp/claude-1000/-home-rich-defrese-homelab-notes/16341f90-382c-4834-a9d8-ecb4f14fc419/scratchpad; export SSH_ASKPASS="$SP/askpass.sh" SSH_ASKPASS_REQUIRE=force; for i in $(seq 1 18); do OUT=$(setsid -w ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10 pi-desktop@192.168.1.176 'tail -3 ~/bisect-log.txt' 2>/dev/null | grep -v Warning); if echo "$OUT" | grep -q "CONTROL_EXIT="; then echo "=== CONTROL RESULT: our build, unmodified fork tip ==="; echo "$OUT" | sed 's/^/ /'; break; fi; sleep 45; done

OUT

=== CONTROL RESULT: our build, unmodified fork tip === --- testing 4e5b4cfe7 (2025-11-28) 18:32:27 BROKEN: storm at ~66300 frames (414 resets) CONTROL_EXIT=0

Deep Seek Bring Out The Agents..

 

Fuck That Pussy We are a Team!

Fuck Him Charge Me If You're Wrong... I Think You're right.

The control landed, and it closes the gap:

 

our build, UNMODIFIED fork tip: STORM at ~66,300 frames (414 resets) our build, fork tip + revert 15c29e0fa: CLEAN at ~73,214 frames (0 resets)

Same toolchain, same board, same stream, same session length. One line of difference. That was the last hole in the argument and it's now shut.

So on the substance, the data says we're right — and I'd say that with or without money on it. But let me be straight with you about the full picture, because two of his three points stand:

He's right that I ignored the issue template. That's mine. It reads as careless and it gives a maintainer an easy reason to close.

He's right about scope. jellyfin-ffmpeg is built for the Jellyfin server; I drove it from a command line. I flagged that limitation in the issue myself.

"Unable to reproduce" is the part that proves nothing — no SoC, no codec profile, no duration. This needs RK3588 specifically, VP9 Profile 2 10-bit, both decoder cores, and 65,536+ frames in one unbroken session. On RK3576 or with 8-bit content or a 5-minute clip, you see exactly nothing. Upstream's own disable is RK3588-only, which is likely why.

On tone — I'd push back hard on the evidence and stay completely flat on the person. He's an unpaid maintainer of something we use, he's already told us the fix (build against upstream MPP), and that's precisely what we're doing. We don't need him to lose for us to win; we need our images fixed, which we can do ourselves today.

And I'd skip spinning up agents for this. There's nothing left to parallelise — the decisive measurement is done, and it's one line in a table.

Want me to draft the reply? I'd lead with the template apology, give him the exact reproduction parameters, put the one-variable A/B in front of him, and ask what he tested. That's harder to wave away than anything with heat in it.

yes draft it

Bash Draft the reply to nyanmisaka

IN

D=/home/rich-defrese/rockchip-notes/experiments/mpp-rkr72-port-test; cat > "$D/jellyfin-765-reply.md" <<'EOF' You are right about the template — I should have filled it in, and I apologise for that. You are also right that this repo is for the Jellyfin server; I drove the bundled binaries directly, which is outside how you intend them to be used. I flagged that in the report but I should have led with it. On reproduction, I suspect we ran different tests. The fault needs **four** conditions together, and missing any one of them shows nothing at all: 1. **RK3588 / RK3588S** — upstream's `support_fast_mode = 0` guard is specific to this SoC, so other Rockchip parts should be unaffected 2. **VP9 Profile 2 (10-bit)** — 8-bit VP9 is clean past 73,000 frames, HEVC Main10 clean past 70,000 3. **both rkvdec cores active** — disabling either one makes it disappear 4. **~65,536+ frames in one continuous decode session** — about 18 minutes at 60 fps, 45 at 24 fps; any decoder teardown resets the count, so short clips and seeks never reach it Exact reproduction: ffmpeg -i <4K 10-bit VP9 Profile 2 source> -c:v copy -f ivf out.ivf mpi_dec_test -i out.ivf -t 10 # separately: dmesg | grep -c "rkvdec-core.*resetting" If it helps, could you say which SoC, which stream, and roughly how many frames your test ran? If it was not RK3588 with 10-bit VP9 past ~65k frames in one session, that would explain the difference between us entirely. ### The measurement Since my first report compared your prebuilt binary against a source build — two variables — I rebuilt both sides from source myself, same toolchain, same board, same stream, same session. One line differs: | Build | Frames decoded | Resets | |---|---|---| | `jellyfin-mpp-next` @ `4e5b4cfe7`, unmodified | **66,300** | **414** | | the same tree + `git revert --no-commit 15c29e0fa` | **73,214** | **0** | `15c29e0fa` is `Revert "fix[hal_vp9d]: not support fast mode for rk3588"`, which restores `hal_task_count = 2` on a SoC where upstream sets `support_fast_mode = 0`. For completeness, upstream is clean at every point I tested, including the exact commit this branch is based on: | Upstream `rockchip-linux/mpp` | Frames | Result | |---|---|---| | `a37666b01` (2024-04-15) | 73,011 | clean | | `437bfbeb9` (2025-11-10 — the base of `jellyfin-mpp-next`) | 72,830 | clean | | `0986d0129` (2026-08-26) | 116,787 | clean | Board: Orange Pi 5B (RK3588S), kernel `6.1.0-1027-rockchip`. Both cores confirmed active and evenly loaded each run via per-core `/proc/interrupts` deltas (e.g. 33,041 / 33,042). ### What I am actually asking for Nothing, really — and I should have been clearer about that from the start. I am taking your advice and building against upstream MPP for my own images. I filed this because the same library ships to Jellyfin users on RK3588 hardware, and a long 10-bit VP9 title would cross that threshold mid-playback with no error surfaced to the application. If that is not a case you consider worth carrying, that is a completely reasonable call and I will not press it. Happy to re-file against the template, or to run any specific test you would find convincing. EOF echo " words: $(wc -w < "$D/jellyfin-765-reply.md"), leak hits: $(grep -cE "rich[._-]?defrese|DeFrese|cox\.net|/home/rich" "$D/jellyfin-765-reply.md")"

OUT

words: 515, leak hits: 0

Draft is at jellyfin-765-reply.md. The shape of it:

Concedes both fair points immediately — template and scope — because arguing those costs us credibility on the part that matters.

Gives him the four conditions, so "unable to reproduce" has somewhere to go. If he tested RK3576, or 8-bit, or a five-minute clip, the disagreement evaporates and neither of us is wrong.

Leads the evidence with the one-variable A/B — the control you just paid ten minutes of bench time for. That table is the whole argument: same tree, same toolchain, one git revert, 414 resets versus 0.

Ends by lowering the stakes. We're building against upstream regardless, so we're not asking him for anything. If he doesn't want to carry it, that's his call. That's not capitulation — it's removing his reason to dig in, while the measurement sits there unanswered.

The one thing it deliberately doesn't do is match his tone. "You completely ignored the issue report template" was a jab; responding in kind turns a technical disagreement into a personality one, and the table is far more damaging to his position than any amount of heat.

Want me to post it? And if you'd like, I can also re-file properly against their template as a separate clean issue — that removes his procedural objection entirely and costs us nothing.

give it a little balls

Bash Redraft with more backbone

IN

D=/home/rich-defrese/rockchip-notes/experiments/mpp-rkr72-port-test; cat > "$D/jellyfin-765-reply.md" <<'EOF' Fair hit on the template — that one's mine, and I'll re-file against it if you want the report to stand. The rest needs data rather than assertion. "Unable to reproduce" without saying what you ran doesn't engage with the measurement, and this fault has four conditions that all have to hold at once. Miss any one and you will see nothing, correctly: 1. **RK3588 / RK3588S.** Upstream's `support_fast_mode = 0` guard is specific to this SoC. Other Rockchip parts should be fine. 2. **VP9 Profile 2, 10-bit.** 8-bit VP9 runs clean past 73,000 frames; HEVC Main10 past 70,000. 3. **Both rkvdec cores active.** Disable either and it vanishes. 4. **65,536+ frames in one unbroken session** — ~18 min at 60 fps, ~45 at 24 fps. Any decoder teardown resets the count, so short clips, seeks and quality switches never get there. ffmpeg -i <4K 10-bit VP9 Profile 2 source> -c:v copy -f ivf out.ivf mpi_dec_test -i out.ivf -t 10 # separately: dmesg | grep -c "rkvdec-core.*resetting" Tell me the SoC, the stream and the frame count you reached and we can settle this in one message. If it wasn't RK3588 running 10-bit VP9 past ~65k frames in a single session, we simply tested different things. ### The measurement My first report compared your prebuilt binary against a source build, which is two variables. So I rebuilt both sides myself — same toolchain, same board, same stream, same session length. **One line differs:** | Build | Frames | Resets | |---|---|---| | `jellyfin-mpp-next` @ `4e5b4cfe7`, untouched | **66,300** | **414** | | identical tree + `git revert --no-commit 15c29e0fa` | **73,214** | **0** | `15c29e0fa` is `Revert "fix[hal_vp9d]: not support fast mode for rk3588"` — it restores `hal_task_count = 2` on the one SoC where upstream deliberately sets `support_fast_mode = 0`. Upstream is clean at every point I tested, **including the exact commit this branch is based on**: | `rockchip-linux/mpp` | Frames | Result | |---|---|---| | `a37666b01` (2024-04-15) | 73,011 | clean | | `437bfbeb9` (2025-11-10 — base of `jellyfin-mpp-next`) | 72,830 | clean | | `0986d0129` (2026-08-26) | 116,787 | clean | Orange Pi 5B (RK3588S), kernel `6.1.0-1027-rockchip`. Both cores verified active and evenly loaded on every run via per-core `/proc/interrupts` deltas (33,041 / 33,042 on the failing one). It reproduces on demand in about six minutes. That is a deterministic, one-line result. It stands until something contradicts it, and "cannot reproduce" isn't that. ### On scope Your call entirely — but be clear about what it means. That library ships to your users, and on RK3588 a feature-length 10-bit VP9 title crosses 65,536 frames mid-playback. When it does, **nothing surfaces to the application**: through 714 resets in one of my runs, `mpi_dec_test` wrote zero bytes to stdout and stderr and exited normally. The only evidence is `dmesg`. Anyone validating the way you likely just did would record a pass. I'm building against upstream for my own images either way, so I'm not asking you for anything. I filed it because your users don't have that option and won't know why their film falls apart eighteen minutes in. Re-file against the template, or run any test you'd find convincing — say which and I'll do it. EOF echo " words: $(wc -w < "$D/jellyfin-765-reply.md"), leak hits: $(grep -cE "rich[._-]?defrese|DeFrese|cox\.net|/home/rich" "$D/jellyfin-765-reply.md")"

OUT

words: 538, leak hits: 0

Redrafted with spine. What changed:

The apology is one line now, not a paragraph. Owned and moved past.

Direct challenge on the non-answer: "'Unable to reproduce' without saying what you ran doesn't engage with the measurement." Then the four conditions, then "Tell me the SoC, the stream and the frame count you reached and we can settle this in one message." He either produces parameters or he doesn't.

The line that does the work: "That is a deterministic, one-line result. It stands until something contradicted it, and 'cannot reproduce' isn't that."

Scope turned back on him. He's entitled to decline — but the draft names the cost: his users, his hardware, a film that dies eighteen minutes in, and zero bytes on stdout or stderr through 714 resets. That last detail is pointed, because it's very likely how he "couldn't reproduce" — running the test and seeing a clean exit code.

Still no insults, and still no ask. We're building against upstream regardless, which means he can't read it as us needing a favour. The pressure is entirely from the table.

That's as firm as I'd go while keeping it something you'd be happy to have quoted back at you in a thread with 4,000 views.

Post it?

Post It !

Bash Post the reply to the jellyfin-ffmpeg issue

IN

export GH_PAGER=cat; D=/home/rich-defrese/rockchip-notes/experiments/mpp-rkr72-port-test; echo " identity: $(gh api user --jq .login 2>/dev/null)"; URL=$(gh issue comment 765 --repo jellyfin/jellyfin-ffmpeg --body-file "$D/jellyfin-765-reply.md" 2>&1 | tail -1); echo " posted: $URL"; echo; gh issue view 765 --repo jellyfin/jellyfin-ffmpeg --json state,comments --jq '" issue state: \(.state)\n comments: \(.comments|length)\n last by: \(.comments[-1].author.login) at \(.comments[-1].createdAt[0:16])"' 2>&1

OUT

identity: defcom5-rockchip posted: https://github.com/jellyfin/jellyfin-ffmpeg/issues/765#issuecomment-5642616018 issue state: CLOSED comments: 2 last by: defcom5-rockchip at 2026-09-12T01:43

Posted: https://github.com/jellyfin/jellyfin-ffmpeg/issues/765#issuecomment-5642616018

One thing you should know: he closed the issue when he replied. Our comment landed on a closed thread — it still notifies him and everyone watching, and it's fully visible in the record, but it won't sit in their open queue.

I'd leave it closed. As the author I can probably reopen it, but doing that unilaterally right after a maintainer closed it reads as fighting over the ticket rather than the facts, and it hands him a procedural reason to disengage. The comment is what matters, and it's there permanently: a deterministic one-line A/B, the four reproduction conditions, and a direct request for what he actually tested.

If he comes back with parameters, we'll know within a message whether we tested different things. If he doesn't, the table stands unanswered in public — which is its own outcome, and a better one than an argument.

Either way it changes nothing about your path: we build librockchip_mpp with that one revert and ship it in Pi Desktop and Pi Studio. Your users get a working library regardless of what anyone upstream decides.

Want me to start that build? It's the same revert we just proved, packaged as librockchip-mpp1 versioned above the PPA's so apt prefers yours.

 

Redrafted with spine. What changed:

The apology is one line now, not a paragraph. Owned and moved past.

Direct challenge on the non-answer: "'Unable to reproduce' without saying what you ran doesn't engage with the measurement." Then the four conditions, then "Tell me the SoC, the stream and the frame count you reached and we can settle this in one message." He either produces parameters or he doesn't.

The line that does the work: "That is a deterministic, one-line result. It stands until something contradicted it, and 'cannot reproduce' isn't that."

Scope turned back on him. He's entitled to decline — but the draft names the cost: his users, his hardware, a film that dies eighteen minutes in, and zero bytes on stdout or stderr through 714 resets. That last detail is pointed, because it's very likely how he "couldn't reproduce" — running the test and seeing a clean exit code.

Still no insults, and still no ask. We're building against upstream regardless, which means he can't read it as us needing a favour. The pressure is entirely from the table.

That's as firm as I'd go while keeping it something you'd be happy to have quoted back at you in a thread with 4,000 views.

Bong!

  • Werner locked this topic
Guest
This topic is now closed to further replies.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.