<feed xmlns='http://www.w3.org/2005/Atom'>
<title>jellyfin/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs, branch v12.0-rc1</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<id>https://git.b0n.dev/jellyfin/atom?h=v12.0-rc1</id>
<link rel='self' href='https://git.b0n.dev/jellyfin/atom?h=v12.0-rc1'/>
<link rel='alternate' type='text/html' href='https://git.b0n.dev/jellyfin/'/>
<updated>2026-06-21T07:43:31Z</updated>
<entry>
<title>Fix audio sample rate forced to 48 kHz for non-Opus codecs</title>
<updated>2026-06-21T07:43:31Z</updated>
<author>
<name>danne</name>
<email>danne.e85@gmail.com</email>
</author>
<published>2026-06-13T20:44:44Z</published>
<link rel='alternate' type='text/html' href='https://git.b0n.dev/jellyfin/commit/?id=e4383493a96da86c99516bfdf69ecd609c2dfec2'/>
<id>urn:sha1:e4383493a96da86c99516bfdf69ecd609c2dfec2</id>
<content type='text'>
GetProgressiveAudioFullCommandLine applied the libopus-only sample rate
quantization to every codec except Opus, inverting the intended guard.
A requested rate such as 44100 Hz was therefore snapped to 48000 Hz for
AAC/MP3/FLAC, while Opus (which actually requires the quantization) was
skipped entirely.

Apply the quantization only when the output codec is Opus, and pass the
requested sample rate through unchanged for all other codecs.

Fixes #17026

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Extend TranscodingReason reporting</title>
<updated>2026-06-15T07:29:24Z</updated>
<author>
<name>Shadowghost</name>
<email>Ghost_of_Stone@web.de</email>
</author>
<published>2026-06-15T07:29:24Z</published>
<link rel='alternate' type='text/html' href='https://git.b0n.dev/jellyfin/commit/?id=1dd5a850807bc4269fce66d2d4191e67027285c8'/>
<id>urn:sha1:1dd5a850807bc4269fce66d2d4191e67027285c8</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fix duplicate trickplay images for interlaced videos</title>
<updated>2026-06-09T12:18:17Z</updated>
<author>
<name>nyanmisaka</name>
<email>nst799610810@gmail.com</email>
</author>
<published>2026-06-09T12:18:17Z</published>
<link rel='alternate' type='text/html' href='https://git.b0n.dev/jellyfin/commit/?id=c693047467e2f454b4ceae7269ceb97df5e71bba'/>
<id>urn:sha1:c693047467e2f454b4ceae7269ceb97df5e71bba</id>
<content type='text'>
Signed-off-by: nyanmisaka &lt;nst799610810@gmail.com&gt;
</content>
</entry>
<entry>
<title>Fix A/V desync when resuming HLS with video transcode + audio copy (#16580)</title>
<updated>2026-05-28T17:26:28Z</updated>
<author>
<name>Piotr Niełacny</name>
<email>piotr.nielacny@gmail.com</email>
</author>
<published>2026-05-28T17:26:28Z</published>
<link rel='alternate' type='text/html' href='https://git.b0n.dev/jellyfin/commit/?id=8d544e48424d9ddbb1f97d354ed6e6a3f749cbfb'/>
<id>urn:sha1:8d544e48424d9ddbb1f97d354ed6e6a3f749cbfb</id>
<content type='text'>
Fix A/V desync when resuming HLS with video transcode + audio copy</content>
</entry>
<entry>
<title>Fix inconsistent extradata generated by hevc_vaapi on AMD driver</title>
<updated>2026-05-23T19:34:54Z</updated>
<author>
<name>nyanmisaka</name>
<email>nst799610810@gmail.com</email>
</author>
<published>2026-05-23T19:31:56Z</published>
<link rel='alternate' type='text/html' href='https://git.b0n.dev/jellyfin/commit/?id=69b0b63a950a7a076a682fb81d3a0ff32239c1a0'/>
<id>urn:sha1:69b0b63a950a7a076a682fb81d3a0ff32239c1a0</id>
<content type='text'>
This change is required for upstream ffmpeg 8+, because its
mp4 muxer will drop in-band PS when using codec tag hvc1.

Signed-off-by: nyanmisaka &lt;nst799610810@gmail.com&gt;
</content>
</entry>
<entry>
<title>Fix StyleCop pattern matching whitespace false-positive</title>
<updated>2026-05-21T18:48:43Z</updated>
<author>
<name>jakobkukla</name>
<email>jakob.kukla@gmail.com</email>
</author>
<published>2025-10-27T15:51:34Z</published>
<link rel='alternate' type='text/html' href='https://git.b0n.dev/jellyfin/commit/?id=eb2cef1b7eaac440f3cc1d3ee2f36a32f72ae37a'/>
<id>urn:sha1:eb2cef1b7eaac440f3cc1d3ee2f36a32f72ae37a</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Run tree-wide dotnet format</title>
<updated>2026-05-21T18:48:41Z</updated>
<author>
<name>jakobkukla</name>
<email>jakob.kukla@gmail.com</email>
</author>
<published>2026-04-16T09:38:01Z</published>
<link rel='alternate' type='text/html' href='https://git.b0n.dev/jellyfin/commit/?id=37350282cc18a977162dcf14fe9b6068d29d6edf'/>
<id>urn:sha1:37350282cc18a977162dcf14fe9b6068d29d6edf</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Normalize VobSub .sub to .idx for embedding, add EncodingHelper tests</title>
<updated>2026-05-19T11:03:07Z</updated>
<author>
<name>Piotr Niełacny</name>
<email>piotr.nielacny@gmail.com</email>
</author>
<published>2026-03-24T13:26:25Z</published>
<link rel='alternate' type='text/html' href='https://git.b0n.dev/jellyfin/commit/?id=405d987557b2638afc89edf3dff20360e39cb09a'/>
<id>urn:sha1:405d987557b2638afc89edf3dff20360e39cb09a</id>
<content type='text'>
Move the .sub to .idx path normalization outside the burn-in check so
it applies to subtitle embedding as well. ffmpeg requires the .idx file
to read VobSub subtitles.

Add unit tests for GetMapArgs and GetInputArgument covering internal
subs, external SRT, multi-file SRT, multi-stream MKS containers, and
VobSub .sub/.idx path normalization.
</content>
</entry>
<entry>
<title>Fix external subtitle stream mapping for multi-stream containers</title>
<updated>2026-05-19T11:03:07Z</updated>
<author>
<name>Piotr Niełacny</name>
<email>piotr.nielacny@gmail.com</email>
</author>
<published>2026-03-24T10:02:10Z</published>
<link rel='alternate' type='text/html' href='https://git.b0n.dev/jellyfin/commit/?id=a15b426e73afb46d7337b98f8279e83847e20f2d'/>
<id>urn:sha1:a15b426e73afb46d7337b98f8279e83847e20f2d</id>
<content type='text'>
Compute the in-file stream index for external subtitles instead of
hardcoding -map 1:0. For single-stream files (SRT/ASS/VTT) the index
is always 0, preserving existing behavior. For multi-stream containers
like MKS, the correct track is selected by counting sibling streams
that share the same Path.

Add unit tests for GetMapArgs covering internal subs, external SRT,
multiple external files, and multi-stream MKS containers.
</content>
</entry>
<entry>
<title>Embed external subtitles into MKV when transcoding</title>
<updated>2026-05-19T11:03:07Z</updated>
<author>
<name>Piotr Niełacny</name>
<email>piotr.nielacny@gmail.com</email>
</author>
<published>2026-03-21T20:57:58Z</published>
<link rel='alternate' type='text/html' href='https://git.b0n.dev/jellyfin/commit/?id=2a689f268bc88ee7ab7e25121a6d43f71c1f8a5f'/>
<id>urn:sha1:2a689f268bc88ee7ab7e25121a6d43f71c1f8a5f</id>
<content type='text'>
Allow external subtitle files (SRT, ASS, PGS, etc.) to be muxed into
MKV output containers when the device profile requests Embed delivery.

Previously, the IsExternal guard in GetSubtitleProfile excluded external
subtitles from Embed consideration entirely, forcing them to be served
as separate sidecar files even when the output container supports
embedding.

Changes:
- Extract CanConsiderEmbedSubtitle in StreamBuilder to allow external
  subs through when transcoding to MKV
- Add external subtitle file as FFmpeg input (-i) for Embed delivery
- Map external embedded subs from the correct FFmpeg input index
- Fix external audio map index to account for the new subtitle input
- Extract NeedsExternalSubtitleMuxing in EncodingHelper to deduplicate
  the external subtitle input check

Fixes #16403
</content>
</entry>
</feed>
