3D auto-detection restored on era BRAVIA (2011-2012) over DLNA — frame-packing SEI + stock Serviio 2.5; help us test other 3D-capable sets #1
Replies: 2 comments
Update — first cross-brand data point (Samsung), and testing just got easierTwo developments since this went up. A cross-brand confirmation, from someone who would know. r0lZ, the author of BD3D2MK3D (the reference tool for authoring 3D MKVs, maintained for about twenty years), replied on his tool's support thread that the disappointing 3D behaviour is not a Sony quirk: "this is common among most major brands. My Samsung TV has exactly the same problem." (BD3D2MK3D support thread, post #602). To be precise about what that is and is not: it is a symptom-level confirmation from an expert, that a Samsung 3D set fails to engage 3D on the same content, not yet the controlled two-file test below run on that Samsung. So it does not isolate the mechanism on Samsung. But it is exactly the signal you would expect if the cause generalises, and it is consistent with the whole premise here: frame-packing SEI is standard H.264 stereoscopic signalling, not a Sony mechanism, so any era set that auto-detects from the elementary stream would behave the same way. It moves "plausibly other brands too" to "at least one other brand, reported by a credible source." Producing a test file is now trivial. When this was written, making a with-SEI clip meant an x264 command line. That changed: HandBrake merged support for writing the frame-packing SEI (PR #8100), so a current HandBrake build now produces the with-SEI half of the test directly from the GUI. Reports on the player side were also filed with mpv (#18489 / PR #18490) and FFmpeg, and mpv's own 3D users have independently reported the panel detecting the signal but the display path refusing to switch, so the finding is being looked at from several directions at once. The ask still stands, and the Samsung case is now the most valuable one to close. If you have an era 3D set from any brand, the two-file test is unchanged:
If it flips only in case 2, it reads the SEI. Report brand / model / year here and I will keep the list. A Samsung owner running exactly this would turn r0lZ's report into a confirmed mechanism, and would be the first entry on that list from outside Sony. |
Update (2026-09-18): the original Dolby track can be kept too, and a second server confirms the 3D fixTwo results since the first post, both owner-verified on a KDL-46EX725 and re-confirmed on a KDL-46HX855. 1. The fix is not Serviio-specific. The same files were served through a completely different server — Kodi's built-in UPnP server, which never transcodes — and behaved identically: an MP4 whose only 3D signal is the frame-packing SEI engaged 3D automatically; the same file with the SEI removed (791 bytes, 2. These sets decode Dolby Digital Plus internally — and the TS remux was throwing it away. With the original track copied bit-exact into MP4:
The Serviio profile in this repo used to normalise everything to AC-3 in MPEG-TS, because MKV can only reach these sets through TS and they cannot take E-AC3 there. For MP4 sources that conversion is unnecessary and lossy, so MKV cannot benefit: Serviio has no Measurements and method: https://github.com/danielcamposramos/sony-bravia-linux/blob/main/docs/audio-capabilities.md |
Uh oh!
There was an error while loading. Please reload this page.
TL;DR: 2011–2012 Sony BRAVIA 3D TVs auto-engage 3D when the H.264 elementary stream carries a
frame_packing_arrangementSEI (payload type 45) — and they ignore the MatroskaStereoModecontainer tag, which is the only 3D flag web rips carry. Net effect: every DLNA-served 3D MKV plays flat on these sets. We reverse-engineered this on real hardware, restored fully automatic 3D with stock Serviio 2.5 + one renderer profile + two small tools, and are publishing everything in this repo. Details, evidence, and a community testing ask below.Audience: Serviio developers and community. We (a right-to-repair project,
own hardware, own LAN) reverse-engineered why 2011–2012 3D-capable BRAVIA
sets never auto-engage 3D over DLNA, then fixed it with stock Serviio 2.5
plus two small add-ons and one renderer profile. This note documents the
mechanism, the fix, and what we believe Serviio could adopt so the solution
reaches 3D-capable renderer families we cannot test.
Hardware tested (both ends of the family)
Identical DLNA sink PN matrices on both (captured live via
ConnectionManager:GetProtocolInfo): AVC only in MPEG-TS, AC-3/MPEG-1 L2 theonly audio decodable inside TS, no Matroska PN at all. One renderer
profile serves both; the only real silicon difference found is AVC decoder
generation (see footnote).
The discovery
These TVs auto-engage 3D (on-screen notice, e.g. "Foi detectado um sinal 3D")
when the H.264 elementary stream carries a
frame_packing_arrangementSEI (payload type 45) — the standard stereoscopic signalling of H.264
(stereoscopic high profile family). They do not read the Matroska
StereoModecontainer tag — which is the only 3D flag web rips carry.So the 3D pipeline breaks at exactly two places in any DLNA server:
is dropped, and no SEI exists in-file → the TV plays the SBS/T&B frames
flat.
parameters (
--frame-packing), so even a freshly re-encoded 3D filecarries no SEI → flat.
Proof was single-variable: byte-identical clips with and without the 16-byte
SEI — the TV flips only with it. Live-proven 2026-09-13 on both sets:
re-encode path across three codec families (MPEG4-ASP AVI, VC-1/WMV,
MPEG4 MOV full-SBS 2560×720) and lossless remux path (SEI injected in-file).
The fix (runs today on stock Serviio 2.5)
user-profiles-3d.xml— one extra profile, "Sony Bravia EX7xx/HX8xx(3D Enhanced)" (id
sony2011x, extends stocksony2011). Deploys asconfig/user-profiles.xml. Output policy MPEG-TS + AC-3; h264 re-encodetargets (not the stock
mpeg2video, which cannot carry frame-packing atall) for over-spec and catch-all paths; no
DAR="16:9"squeezes.ffmpeg-3d-wrapper.sh— installed as/usr/local/bin/ffmpeginfront of the real binary on the Serviio host. Whenever Serviio re-encodes
with libx264 and any input is 3D-flagged (Matroska
stereo_modetag,filename tokens sbs/tb/
[3D]), it appends-x264-params frame-packing=3|4(3 = side-by-side, 4 = top-and-bottom).Decisions are logged. SEI is ignorable metadata, so non-3D renderers are
unaffected.
bravia_sei3d.py— for the remux path, where nothing can be injectedin flight: losslessly inserts the x264-verbatim frame_packing SEI before
every IDR of the existing stream (no re-encode, ~0.002% size growth),
remuxes, restores the Matroska StereoMode tag, verifies, replaces
in place. Idempotent — files that already carry the SEI are skipped.
What Serviio could adopt upstream
side data on x264 encode — that alone would obsolete our wrapper for the
re-encode path (our host runs system ffmpeg 6.1.6).
(
frame-packing, and we'd addweightp/weightb, see footnote) would turnthe transcode-path fix into a pure-profile fix, no host-level wrapper.
delivery paths, carry the container's stereo flag into the elementary
stream as SEI (a bitstream filter). That covers the remux path with no
preprocessing and zero quality cost, for any renderer that auto-detects
from SEI.
a Sony mechanism — we simply cannot test other manufacturers' era sets
(Samsung/LG/Panasonic/Toshiba 3D DLNA renderers). A per-profile "inject
stereoscopic signalling" toggle (or even a debug log line when a 3D-flagged
file is delivered without SEI) would let the community verify on their own
hardware quickly and map which renderer families auto-detect.
Requirements — what works on the fly vs. what needs pre-processing
With the profile + wrapper deployed on the Serviio host:
bravia_sei3d.pyonce (lossless, in-place, idempotent); plays 3D forever after.A whole library can be fixed overnight:
bravia_sei3d.py "3D Movies" --recursive --in-place(dry-run first with--dry-run).Footnote — 2011 vs 2012 AVC decoder generation
Before testing other era sets, know this: the 2011 EX7xx AVC decoder
cannot decode H.264 weighted prediction (
weighted_pred_flag=1/weighted_bipred_idc=2): black screen, audio only. The 2012 HX8xxdecodes the same stream fine. Every 2015+ WEB-DL we sampled carries weighted
prediction, so such files need a re-encode (x264
weightp=0:weightb=0) for2011-generation silicon — regardless of 3D. Don't misread that black screen
as a 3D/SEI problem: position reporting still advances and audio plays.
Files (this repo,
tools/serviio/)user-profiles-3d.xml— the renderer profile (single profile, both lines)ffmpeg-3d-wrapper.sh— transcode-path SEI injection wrapperbravia_sei3d.py— lossless remux-path SEI injectorREADME.md— full evidence base and test log (sink matrices, profilechain analysis, live proof timeline)
Community ask: help map which sets auto-detect
We could only test our own two TVs (both ends of Sony's 2011–2012 family).
The signalling involved is standard H.264 stereoscopic syntax, not a Sony
mechanism — so other era 3D-capable DLNA renderers (Samsung, LG, Panasonic,
Toshiba…) plausibly auto-detect the same way. A quick test for any set:
expect flat.
bravia_sei3d.py --dry-runthen in-place, or any x264 encode with
--frame-packing 3).If your TV flips only in case 2, it reads the SEI — report brand / model /
year in this thread and we'll keep a list. That list is exactly what a
Serviio-side "inject stereoscopic signalling" option would need.
Where everything lives
tools/serviio/user-profiles-3d.xml— the renderer profiletools/serviio/ffmpeg-3d-wrapper.sh— transcode-path SEI injectiontools/bravia_sei3d.py— lossless remux-path SEI injectortools/serviio/README.md— full evidence base and test logQuestions, corrections, and test results welcome.
All reactions