Giter Club home page Giter Club logo

Comments (25)

nielsvanvelzen avatar nielsvanvelzen commented on June 10, 2024 2

I don't think this affects the behaviour, but @nielsvanvelzen cherry picked the first commit in that PR for v0.16.5 rather than all of them. Therefore v0.16.5 contains the initial unfixed-up version of my change. I assume this was a mistake.

It wasn't intentional and I've now cherrypicked the missing commits to make sure they will be in the next 0.16 release.

from jellyfin-androidtv.

MichaelRUSF avatar MichaelRUSF commented on June 10, 2024 1

Yeah, you are correct. I failed to notice that the software encoder was Main not Main10.

Current:
Main 5.2 plays without transcoding
Main10 5.2 transcodes

Without the level checks in the prior build, Main10 5.2 played without transcoding.

from jellyfin-androidtv.

lawadr avatar lawadr commented on June 10, 2024

This is odd. The only thing I can think of is that MediaCodec is reporting a lower level than is really supported, causing transcoding. But even that I can't believe is true.

Level 156 is profile level 5.2, which the Shield should definitely support. Does logcat show the device profile being sent to the server? Or maybe the server logs show it. This would certainly help narrow down the problem.

I'll take a look to see what could be causing this, even though I don't have a Shield to test on.

from jellyfin-androidtv.

lawadr avatar lawadr commented on June 10, 2024

I don't think this affects the behaviour, but @nielsvanvelzen cherry picked the first commit in that PR for v0.16.5 rather than all of them. Therefore v0.16.5 contains the initial unfixed-up version of my change. I assume this was a mistake.

As I said, shouldn't affect anything, but more confusing to debug.

from jellyfin-androidtv.

lawadr avatar lawadr commented on June 10, 2024

Is there any chance you can run dumpsys media.player in an adb shell and attach the result? This should dump exactly what MediaCodec reports as supported on the device.

from jellyfin-androidtv.

VampiricAlien avatar VampiricAlien commented on June 10, 2024

Nothing transcoded before last update, Does this help?

  Decoder "OMX.Nvidia.h265.decode" supports
    aliases: []
    attributes: 0xa: [
      encoder: 0,
      vendor: 1,
      software-only: 0,
      hw-accelerated: 1 ]
    owner: "default"
    rank: 256
    profile/levels: [
          1/131072 (Main/High 5.1),
          2/131072 (Main10/High 5.1),
       4096/131072 (Main10HDR10/High 5.1) ]
    colors: [
      0x7f420888 (YUV420Flexible),
      0x15 (YUV420SemiPlanar) ]
    details: AMessage(what = 0x00000000) = {
        string alignment = "2x2"
        string bitrate-range = "1-120000000"
        string block-size = "16x16"
        string blocks-per-second-range = "1-2000000"
        int32_t feature-adaptive-playback = 0
        int32_t feature-low-latency = 0
        string measured-frame-rate-1280x720-range = "1030-1030"
        string measured-frame-rate-1920x1088-range = "409-589"
        string measured-frame-rate-352x288-range = "2239-2239"
        string measured-frame-rate-640x368-range = "1950-1950"
        string performance-point-3840x2160-range = "60-60"
        string size-range = "144x144-3840x2176"
      }
  Decoder "OMX.Nvidia.h265.decode.secure" supports
    aliases: []
    attributes: 0xa: [
      encoder: 0,
      vendor: 1,
      software-only: 0,
      hw-accelerated: 1 ]
    owner: "default"
    rank: 256
    profile/levels: [
          1/131072 (Main/High 5.1),
          2/131072 (Main10/High 5.1),
       4096/131072 (Main10HDR10/High 5.1) ]
    colors: [
      0x7f420888 (YUV420Flexible),
      0x15 (YUV420SemiPlanar) ]
    details: AMessage(what = 0x00000000) = {
        string alignment = "2x2"
        string bitrate-range = "1-120000000"
        string block-size = "16x16"
        string blocks-per-second-range = "1-2000000"
        int32_t feature-adaptive-playback = 0
        int32_t feature-secure-playback = 1
        string performance-point-3840x2160-range = "60-60"
        string size-range = "144x144-3840x2176"
      }
  Decoder "OMX.google.hevc.decoder" supports
    aliases: []
    attributes: 0: [
      encoder: 0,
      vendor: 0,
      software-only: 0,
      hw-accelerated: 0 ]
    owner: "default"
    rank: 528
    profile/levels: [
          1/65536 (Main/Main 5.1),
          4/65536 (MainStill/Main 5.1) ]
    colors: [
      0x7f420888 (YUV420Flexible),
      0x13 (YUV420Planar) ]
    details: AMessage(what = 0x00000000) = {
        string alignment = "2x2"
        string bitrate-range = "1-10000000"
        string block-count-range = "1-196608"
        string block-size = "8x8"
        string blocks-per-second-range = "1-2000000"
        int32_t feature-adaptive-playback = 0
        string measured-frame-rate-1280x720-range = "120-140"
        string measured-frame-rate-1920x1080-range = "63-78"
        string measured-frame-rate-352x288-range = "584-590"
        string measured-frame-rate-640x360-range = "306-319"
        string size-range = "2x2-4096x4096"
      }

from jellyfin-androidtv.

lawadr avatar lawadr commented on June 10, 2024
  Decoder "OMX.Nvidia.h265.decode" supports
    profile/levels: [
          1/131072 (Main/High 5.1),
          2/131072 (Main10/High 5.1),
       4096/131072 (Main10HDR10/High 5.1) ]

This shows that the device is self reporting a maximum of level 5.1 high tier for the Main 10 profile. This should guarantee support for all high tier and main tier streams at level 5.1 and below.

Your file appears to be encoded at level 5.2 main tier which your device doesn't report to support.

If you have a look at https://en.wikipedia.org/wiki/High_Efficiency_Video_Coding#Tiers_and_levels you can see that 5.2 main tier supports a bitrate of 60,000 kbit/s while 5.1 high tier supports up to 160,000 kbit/s. But as far as I know, a 5.2 encoding can support things that a 5.1 decoder can't handle.

My guess is that the Shield actually supports a higher level main tier than high tier, such as 5.2 main tier and 5.1 high tier, but it's not reporting that fact.

from jellyfin-androidtv.

MichaelRUSF avatar MichaelRUSF commented on June 10, 2024

The shield probably has hardware decoders for up to 5.1 and software decoding for 5.2. Seems like the same issue with the Fire TV Stick 4K - 2nd Gen (2023). 5.2 now transcodes instead of relying on the built-in software decoder.

The device specs even state it only goes up to 5.1
"H.265 (HEVC). Hardware accelerated up to 3840x2160p (4K) @ 60 fps, 35 Mbps, Main 10 Profile Level 5.1, Color space 8-bit and 10-bit input with HDR10, HDR10+, and HLG"

Fire TV Stick's reported capabilities:

Media type 'video/ ':
  Decoder "OMX.MTK.VIDEO.DECODER.HEVC" supports
    aliases: []
    attributes: 0xa: [
      encoder: 0,
      vendor: 1,
      software-only: 0,
      hw-accelerated: 1 ]
    owner: "default"
    rank: 256
    profile/levels: [
          1/    1 (Main/Main 1),
          1/    2 (Main/High 1),
          1/    4 (Main/Main 2),
          1/    8 (Main/High 2),
          1/   16 (Main/Main 2.1),
          1/   32 (Main/High 2.1),
          1/   64 (Main/Main 3),
          1/  128 (Main/High 3),
          1/  256 (Main/Main 3.1),
          1/  512 (Main/High 3.1),
          1/ 1024 (Main/Main 4),
          1/ 2048 (Main/High 4),
          1/ 4096 (Main/Main 4.1),
          1/ 8192 (Main/High 4.1),
          1/16384 (Main/Main 5),
          1/32768 (Main/High 5),
          1/65536 (Main/Main 5.1),
          1/131072 (Main/High 5.1),
          2/    1 (Main10/Main 1),
          2/    2 (Main10/High 1),
          2/    4 (Main10/Main 2),
          2/    8 (Main10/High 2),
          2/   16 (Main10/Main 2.1),
          2/   32 (Main10/High 2.1),
          2/   64 (Main10/Main 3),
          2/  128 (Main10/High 3),
          2/  256 (Main10/Main 3.1),
          2/  512 (Main10/High 3.1),
          2/ 1024 (Main10/Main 4),
          2/ 2048 (Main10/High 4),
          2/ 4096 (Main10/Main 4.1),
          2/ 8192 (Main10/High 4.1),
          2/16384 (Main10/Main 5),
          2/32768 (Main10/High 5),
          2/65536 (Main10/Main 5.1),
          2/131072 (Main10/High 5.1),
       4096/    1 (Main10HDR10/Main 1),
       4096/    2 (Main10HDR10/High 1),
       4096/    4 (Main10HDR10/Main 2),
       4096/    8 (Main10HDR10/High 2),
       4096/   16 (Main10HDR10/Main 2.1),
       4096/   32 (Main10HDR10/High 2.1),
       4096/   64 (Main10HDR10/Main 3),
       4096/  128 (Main10HDR10/High 3),
       4096/  256 (Main10HDR10/Main 3.1),
       4096/  512 (Main10HDR10/High 3.1),
       4096/ 1024 (Main10HDR10/Main 4),
       4096/ 2048 (Main10HDR10/High 4),
       4096/ 4096 (Main10HDR10/Main 4.1),
       4096/ 8192 (Main10HDR10/High 4.1),
       4096/16384 (Main10HDR10/Main 5),
       4096/32768 (Main10HDR10/High 5),
       4096/65536 (Main10HDR10/Main 5.1),
       4096/131072 (Main10HDR10/High 5.1),
       8192/    1 (Main10HDR10Plus/Main 1),
       8192/    2 (Main10HDR10Plus/High 1),
       8192/    4 (Main10HDR10Plus/Main 2),
       8192/    8 (Main10HDR10Plus/High 2),
       8192/   16 (Main10HDR10Plus/Main 2.1),
       8192/   32 (Main10HDR10Plus/High 2.1),
       8192/   64 (Main10HDR10Plus/Main 3),
       8192/  128 (Main10HDR10Plus/High 3),
       8192/  256 (Main10HDR10Plus/Main 3.1),
       8192/  512 (Main10HDR10Plus/High 3.1),
       8192/ 1024 (Main10HDR10Plus/Main 4),
       8192/ 2048 (Main10HDR10Plus/High 4),
       8192/ 4096 (Main10HDR10Plus/Main 4.1),
       8192/ 8192 (Main10HDR10Plus/High 4.1),
       8192/16384 (Main10HDR10Plus/Main 5),
       8192/32768 (Main10HDR10Plus/High 5),
       8192/65536 (Main10HDR10Plus/Main 5.1),

	   
 Decoder "c2.android.hevc.decoder" supports
    aliases: [
      "OMX.google.hevc.decoder" ]
    attributes: 0x4: [
      encoder: 0,
      vendor: 0,
      software-only: 1,
      hw-accelerated: 0 ]
    owner: "codec2::software"
    rank: 512
    profile/levels: [
          1/524288 (Main/High 5.2),
          4/524288 (MainStill/High 5.2)

from jellyfin-androidtv.

lawadr avatar lawadr commented on June 10, 2024

The shield probably has hardware decoders for up to 5.1 and software decoding for 5.2. Seems like the same issue with the Fire TV Stick 4K - 2nd Gen (2023). 5.2 now transcodes instead of relying on the built-in software decoder.

I don't think this is the case because all decoders are checked for the maximum, including software decoders.

From the information that @VampiricAlien provided, the software decoder on the Shield can't even handle Main 10 profile, which is what we're looking at. It supports only up to 5.1 main tier for the Main profile, while the hardware decoder supports up to 5.1 high tier for both Main and Main 10.

From the information you've provided from the Fire TV Stick 4K - 2nd Gen (2023), the software decoder supports only up to 5.2 high tier for the Main profile (and not the Main 10 profile). The hardware decoder supports up to 5.1 high tier for both Main and Main 10, which is the same as the Shield.

If you are also talking about a Main 10 level 5.2 main tier video stream, like @VampiricAlien is, then neither the Fire TV Stick 4K or the Shield seems to be reporting support for this. This indicates nothing in the logic of the change is broken as such, just that both devices seem to support beyond what they claim.

The previous behaviour for the Android TV client was to accept any HEVC Main stream if any HEVC decoder exists (practically all devices), and HEVC Main 10 if profile level 5 main tier is supported for it. The behaviour now is base support for both Main and Main 10 on the maximum level supported by any decoder. Therefore transcoding would be expected based on given the source file and reported decoder support.

from jellyfin-androidtv.

lawadr avatar lawadr commented on June 10, 2024

Here are some solutions:

  1. Do nothing and report issues to the device manufacturers to fix their media configs
  2. Remove the limit when the device reports a specific level or higher, such as 5.1 high tier
  3. Remove the limit for specific device IDs

from jellyfin-androidtv.

VampiricAlien avatar VampiricAlien commented on June 10, 2024

Here are some solutions:

1. Do nothing and report issues to the device manufacturers to fix their media configs

2. Remove the limit when the device reports a specific level or higher, such as 5.1 high tier

3. Remove the limit for specific device IDs

I don't see option 1 happening anytime soon, upgrade hardware should solved it but this might not be an option for everyone.
Since the update, I never hand an issue with HEVC main 10 level 5.1. ( as you said that both devices seem to support beyond what they claim), I am open to temp solution if needed.

from jellyfin-androidtv.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.