Open VampiricAlien opened 8 months ago
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.
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.
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.
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"
}
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.
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.
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)
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.
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.
Here are some solutions:
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.
v0.16.6 doesn't fix this issue, is there a workaround?
v0.16.6 doesn't fix this issue, is there a workaround?
I'm struggling to find any information about what profile levels are supported on the Shield. I can't find a source that it supports HEVC Main 10 5.2. My concern is that you can get your specific media to play back on it, but other valid 5.2 media will fail.
Tegra X1 (CPU) supports decode of 10-bit H.265 video streams, like you I can not find any more information out about levels.
Before the patch level 5.1 played without issue.
Before the patch level 5.1 played without issue.
Hang on. Your original post says that your media file is Main10 level 5.2, not level 5.1. Does 5.1 work? It definitely should.
If you do still mean 5.2 as your original post states, are you sure the Shield handles all 5.2 media? Have you tried playing back a UHD/4k stream on it? Give this file a try: http://www.larmoire.info/jellyfish/media/jellyfish-200-mbps-4k-uhd-hevc-10bit.mkv
Most (if not all?) streaming devices don't support HEVC level 5.2 because UHD Blu-rays are only 5.1. I can't think of many use cases right now for a streaming device to handle more than that considering the lack of content better than a UHD Blu-ray out there. In fact, HEVC level 5.2 is a very odd choice for 1080p content.
We also host copies of the jellyfish samples if needed: https://repo.jellyfin.org/jellyfish/
Before the patch level 5.1 played without issue.
Hang on. Your original post says that your media file is Main10 level 5.2, not level 5.1. Does 5.1 work? It definitely should.
If you do still mean 5.2 as your original post states, are you sure the Shield handles all 5.2 media? Have you tried playing back a UHD/4k stream on it? Give this file a try: http://www.larmoire.info/jellyfish/media/jellyfish-200-mbps-4k-uhd-hevc-10bit.mkv
Most (if not all?) streaming devices don't support HEVC level 5.2 because UHD Blu-rays are only 5.1. I can't think of many use cases right now for a streaming device to handle more than that considering the lack of content better than a UHD Blu-ray out there. In fact, HEVC level 5.2 is a very odd choice for 1080p content.
Sorry, level 5.2. was working before the patch. Level wasn't an issue so never though much of it until now. I've updated the Level to 5.0, this won't change the fact that many will transcode now.
0.16 Beta 4: The source file is entirely compatible with this client, and the session is receiving the file without modifications.
0.16.6: The video codec's level is not supported
The 4k video file from the link: Reason for transcoding: The video's bitrate exceeds the limit (was on 120Mbit/s, now set to auto, no change) I think this is a device limit as I am unable to play it in the beta app.
Testing 4K files
Codec HEVC
Profile Main 10
Level 150
Resolution 3840x1920
Aspect ratio2:1
Interlaced No
Framerate 23.976025
Bitrate 14271 kbps
Bit depth 10 bit
Reason for transcoding: The video's bitrate exceeds the limit. This plays in the beta app without transcoding.
I always have the beta app install for testing.
The video's bitrate exceeds the limit.
What is the bitrate in the app preferences set to?
The video's bitrate exceeds the limit.
What is the bitrate in the app preferences set to?
Was set to 120, now set to auto.
120Mbit/s is the highest, is this set by my the device or app?
I've updated the Level to 5.0, this won't change the fact that many will transcode now.
What does this mean? You've updated what to 5.0?
The 4k video file from the link: Reason for transcoding: The video's bitrate exceeds the limit (was on 120Mbit/s, now set to auto, no change) I think this is a device limit as I am unable to play it in the beta app.
I think there's a 100mbit/s limit hardcoded in the client for direct played files, and 20mbit/s for transcoded streams. What I meant was to copy the file to the device, or put it on a USB stick or something, and try playing it in some local player to see if the hardware can do it. I'm pretty sure you'll find it won't play back properly, or at the very best it'll stutter badly. That's likely the reason the device doesn't advertise level 5.2.
Testing 4K files
Codec HEVC Profile Main 10 Level 150 Resolution 3840x1920 Aspect ratio2:1 Interlaced No Framerate 23.976025 Bitrate 14271 kbps Bit depth 10 bit
Reason for transcoding: The video's bitrate exceeds the limit. This plays in the beta app without transcoding.
That's a 5.0 file. We're trying to test for 5.2 support.
@lawadr I understand we're testing support for Level 5.2, The level 150 was to show it plays in the beta app without transcode but in 0.16.6 because of the bitrate it transcodes. Possibly a new issue.
The Video file played without problem in VLC (as expected) testing using device player, playback wasn't smooth in the beginning but came right in the middle.
I downloaded jellyfish-160-mbps-4k-uhd-hevc-10bit.mkv and give that a try, it plays better the other file, 40Mb/s less made a little deference. It would seem like you said it's hard coded to 100Mb/s.
Where do we go from here? We have tested Nvdia Shield android 11 device to find it supports up to HEVC level 5.1 and has a hard coded bitrate limited of 120mb/s.
further more, the app used to play anything HEVC @ level 5.2. I do not know how.
First off let me say that 99.99% of my HEVC media is under Main10 5.1 and I have no issues playing them back. I was only able to find two files in my library that exceeded those limits, one HEVC Main 10 5.2 and one HEVC Main 10 6.1 file.
I’ve also been testing out this issue on different devices so let me limit this to my Sony X90J TV. It has a MediaTek MT5895, which supports “HEVC: 8K@60fps”. That should be at level 6.1 if I’m reading this table correctly.
With the level checks in place, I get limited to 5.2 level for both HEVC Main & Main10. Meaning any level higher than 5.2 gets transcoded, 5.2 and below direct plays. Both HEVC Main & Main10 6.1 sample media files will play directly with no issues if I bypass the level checks.
Dumpsys media.player comes back empty so I can’t tell what the TV is reporting as its capabilities, but it’s probably up to level 5.2 based on when transcoding begins. Even though I can play 6.1 Main and Main10 files directly.
To me, the ideal solution would be to have a user-adjustable menu. With the default option of auto, which would be set to the levels checks. Then the user could override it and choose their max level, very similar to how Plex handles h264 levels.
First off let me say that 99.99% of my HEVC media is under Main10 5.1 and I have no issues playing them back. I was only able to find two files in my library that exceeded those limits, one HEVC Main 10 5.2 and one HEVC Main 10 6.1 file.
I’ve also been testing out this issue on different devices so let me limit this to my Sony X90J TV. It has a MediaTek MT5895, which supports “HEVC: 8K@60fps”. That should be at level 6.1 if I’m reading this table correctly.
With the level checks in place, I get limited to 5.2 level for both HEVC Main & Main10. Meaning any level higher than 5.2 gets transcoded, 5.2 and below direct plays. Both HEVC Main & Main10 6.1 sample media files will play directly with no issues if I bypass the level checks.
Dumpsys media.player comes back empty so I can’t tell what the TV is reporting as its capabilities, but it’s probably up to level 5.2 based on when transcoding begins. Even though I can play 6.1 Main and Main10 files directly.
To me, the ideal solution would be to have a user-adjustable menu. With the default option of auto, which would be set to the levels checks. Then the user could override it and choose their max level, very similar to how Plex handles h264 levels.
This would be an acceptable solution to this issue, in app setting or server setting?
@VampiricAlien That would be an app-based solution, but that's just an idea, no one is working on it. Would you mind attaching the entire dumpsys media.player
for your shield? I'd like to know what's it reporting for other decoders. And which version of the shield do you have?
Also, you shouldn't use the auto bitrate option, stick with 120, and you'll get the best results. It's been removed as an option for the .17 release.
Client
pid(4516), connId(1), status(0), looping(false)
NuPlayer
state(4), atEOS(0), looping(0), autoLoop(0)
AudioOutput
stream type(3), left - right volume(1.000000, 1.000000)
msec per frame(0.000000), latency (-1)
aux effect id(0), send level (0.000000)
5 registered handlers:
1: MediaClock: 0 messages processed
2: NuPlayerDriver Looper: 7 messages processed
3: generic: 2 messages processed
16: <stale>
17: <stale>
Decoder infos by media types:
=============================
Media type 'audio/3gpp':
Decoder "OMX.google.amrnb.decoder" supports
aliases: []
attributes: 0: [
encoder: 0,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 16
profile/levels: []
colors: []
details: AMessage(what = 0x00000000) = {
string bitrate-range = "4750-12200"
string max-channel-count = "1"
string sample-rate-ranges = "8000"
}
Media type 'audio/amr-wb':
Decoder "OMX.google.amrwb.decoder" supports
aliases: []
attributes: 0: [
encoder: 0,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 16
profile/levels: []
colors: []
details: AMessage(what = 0x00000000) = {
string bitrate-range = "6600-23850"
string max-channel-count = "1"
string sample-rate-ranges = "16000"
}
Media type 'audio/flac':
Decoder "OMX.google.flac.decoder" supports
aliases: []
attributes: 0: [
encoder: 0,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 16
profile/levels: []
colors: []
details: AMessage(what = 0x00000000) = {
string bitrate-range = "1-21000000"
string max-channel-count = "8"
string sample-rate-ranges = "1-655350"
}
Media type 'audio/g711-alaw':
Decoder "OMX.google.g711.alaw.decoder" supports
aliases: []
attributes: 0: [
encoder: 0,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 16
profile/levels: []
colors: []
details: AMessage(what = 0x00000000) = {
string bitrate-range = "64000"
string max-channel-count = "6"
string sample-rate-ranges = "8000-48000"
}
Media type 'audio/g711-mlaw':
Decoder "OMX.google.g711.mlaw.decoder" supports
aliases: []
attributes: 0: [
encoder: 0,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 16
profile/levels: []
colors: []
details: AMessage(what = 0x00000000) = {
string bitrate-range = "64000"
string max-channel-count = "6"
string sample-rate-ranges = "8000-48000"
}
Media type 'audio/mp4a-latm':
Decoder "OMX.google.aac.decoder" supports
aliases: []
attributes: 0: [
encoder: 0,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 16
profile/levels: [
2/ 0 (LC/??),
5/ 0 (HE/??),
29/ 0 (HE_PS/??),
23/ 0 (LD/??),
39/ 0 (ELD/??),
20/ 0 (ERScalable/??),
42/ 0 (XHE/??) ]
colors: []
details: AMessage(what = 0x00000000) = {
string bitrate-range = "8000-960000"
string max-channel-count = "8"
string sample-rate-ranges = "7350,8000,11025,12000,16000,22050,24000,32000,44100,48000"
}
Media type 'audio/mpeg':
Decoder "OMX.google.mp3.decoder" supports
aliases: []
attributes: 0: [
encoder: 0,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 16
profile/levels: []
colors: []
details: AMessage(what = 0x00000000) = {
string bitrate-range = "8000-320000"
string max-channel-count = "2"
string sample-rate-ranges = "8000,11025,12000,16000,22050,24000,32000,44100,48000"
}
Media type 'audio/mpeg-L2':
Decoder "OMX.Nvidia.mp2.decoder" supports
aliases: []
attributes: 0xa: [
encoder: 0,
vendor: 1,
software-only: 0,
hw-accelerated: 1 ]
owner: "default"
rank: 256
profile/levels: []
colors: []
details: AMessage(what = 0x00000000) = {
string bitrate-range = "8000-384000"
string max-channel-count = "6"
string sample-rate-ranges = "16000,22050,24000,32000,44100,48000"
}
Media type 'audio/opus':
Decoder "OMX.google.opus.decoder" supports
aliases: []
attributes: 0: [
encoder: 0,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 16
profile/levels: []
colors: []
details: AMessage(what = 0x00000000) = {
string bitrate-range = "6000-510000"
string max-channel-count = "8"
string sample-rate-ranges = "8000,12000,16000,24000,48000"
}
Media type 'audio/raw':
Decoder "OMX.google.raw.decoder" supports
aliases: []
attributes: 0: [
encoder: 0,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 16
profile/levels: []
colors: []
details: AMessage(what = 0x00000000) = {
string bitrate-range = "1-10000000"
string max-channel-count = "8"
string sample-rate-ranges = "8000-192000"
}
Media type 'audio/vorbis':
Decoder "OMX.google.vorbis.decoder" supports
aliases: []
attributes: 0: [
encoder: 0,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 16
profile/levels: []
colors: []
details: AMessage(what = 0x00000000) = {
string bitrate-range = "32000-500000"
string max-channel-count = "8"
string sample-rate-ranges = "8000-96000"
}
Media type 'audio/x-ms-wma':
Decoder "OMX.Nvidia.wma.decoder" supports
aliases: []
attributes: 0xa: [
encoder: 0,
vendor: 1,
software-only: 0,
hw-accelerated: 1 ]
owner: "default"
rank: 256
profile/levels: []
colors: []
details: AMessage(what = 0x00000000) = {
string bitrate-range = "8000-384000"
string max-channel-count = "6"
string sample-rate-ranges = "16000,22050,24000,32000,44100,48000"
}
Media type 'video/3gpp':
Decoder "OMX.Nvidia.h263.decode" supports
aliases: []
attributes: 0xa: [
encoder: 0,
vendor: 1,
software-only: 0,
hw-accelerated: 1 ]
owner: "default"
rank: 256
profile/levels: [
1/ 32 (Baseline/50) ]
colors: [
0x7f420888 (YUV420Flexible),
0x15 (YUV420SemiPlanar) ]
details: AMessage(what = 0x00000000) = {
string alignment = "2x2"
int32_t feature-adaptive-playback = 0
string measured-frame-rate-176x144-range = "2335-2335"
string measured-frame-rate-352x288-range = "1492-1950"
string performance-point-1920x1080-range = "240-240"
string size-range = "48x48-720x576"
}
Decoder "OMX.google.h263.decoder" supports
aliases: []
attributes: 0: [
encoder: 0,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 528
profile/levels: [
1/ 4 (Baseline/30),
1/ 16 (Baseline/45),
8/ 4 (ISWV2/30),
8/ 16 (ISWV2/45) ]
colors: [
0x7f420888 (YUV420Flexible),
0x13 (YUV420Planar) ]
details: AMessage(what = 0x00000000) = {
string alignment = "2x2"
string bitrate-range = "1-384000"
int32_t feature-adaptive-playback = 0
string measured-frame-rate-176x144-range = "1122-1187"
string measured-frame-rate-352x288-range = "720-820"
string size-range = "2x2-352x288"
}
Media type 'video/avc':
Decoder "OMX.Nvidia.h264.decode" supports
aliases: []
attributes: 0xa: [
encoder: 0,
vendor: 1,
software-only: 0,
hw-accelerated: 1 ]
owner: "default"
rank: 256
profile/levels: [
1/32768 (Baseline/5.1),
65536/32768 (ConstrainedBaseline/5.1),
2/65536 (Main/5.2),
8/65536 (High/5.2),
524288/65536 (ConstrainedHigh/5.2) ]
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 = "811-811"
string measured-frame-rate-1920x1088-range = "346-346"
string measured-frame-rate-320x240-range = "2273-2273"
string measured-frame-rate-720x480-range = "1413-1413"
string performance-point-1920x1080-range = "240-240"
string performance-point-3840x2160-range = "60-60"
string size-range = "48x48-3840x2176"
}
Decoder "OMX.Nvidia.h264.decode.secure" supports
aliases: []
attributes: 0xa: [
encoder: 0,
vendor: 1,
software-only: 0,
hw-accelerated: 1 ]
owner: "default"
rank: 256
profile/levels: [
1/32768 (Baseline/5.1),
65536/32768 (ConstrainedBaseline/5.1),
2/65536 (Main/5.2),
8/65536 (High/5.2),
524288/65536 (ConstrainedHigh/5.2) ]
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-1920x1080-range = "240-240"
string performance-point-3840x2160-range = "60-60"
string size-range = "48x48-3840x2176"
}
Decoder "OMX.google.h264.decoder" supports
aliases: []
attributes: 0: [
encoder: 0,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 528
profile/levels: [
65536/65536 (ConstrainedBaseline/5.2),
1/65536 (Baseline/5.2),
2/65536 (Main/5.2),
524288/65536 (ConstrainedHigh/5.2),
8/65536 (High/5.2) ]
colors: [
0x7f420888 (YUV420Flexible),
0x13 (YUV420Planar) ]
details: AMessage(what = 0x00000000) = {
string alignment = "2x2"
string bitrate-range = "1-48000000"
string block-count-range = "1-32768"
string block-size = "16x16"
string blocks-per-second-range = "1-1966080"
int32_t feature-adaptive-playback = 0
string measured-frame-rate-1280x720-range = "86-96"
string measured-frame-rate-1920x1080-range = "64-71"
string measured-frame-rate-320x240-range = "782-782"
string measured-frame-rate-720x480-range = "227-253"
string size-range = "2x2-4080x4080"
}
Media type 'video/dolby-vision':
Decoder "OMX.Nvidia.DOVI.decode" supports
aliases: []
attributes: 0xa: [
encoder: 0,
vendor: 1,
software-only: 0,
hw-accelerated: 1 ]
owner: "default"
rank: 256
profile/levels: [
32/ 256 (??/??),
256/ 256 (??/??),
512/ 256 (??/??),
16/ 256 (??/??) ]
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
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.DOVI.decode.secure" supports
aliases: []
attributes: 0xa: [
encoder: 0,
vendor: 1,
software-only: 0,
hw-accelerated: 1 ]
owner: "default"
rank: 256
profile/levels: [
32/ 256 (??/??),
256/ 256 (??/??),
512/ 256 (??/??),
16/ 256 (??/??) ]
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"
}
Media type 'video/hevc':
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"
}
Media type 'video/mp4v-es':
Decoder "OMX.Nvidia.mp4.decode" supports
aliases: []
attributes: 0xa: [
encoder: 0,
vendor: 1,
software-only: 0,
hw-accelerated: 1 ]
owner: "default"
rank: 256
profile/levels: [
1/ 128 (Simple/5),
32768/ 128 (AdvancedSimple/5) ]
colors: [
0x7f420888 (YUV420Flexible),
0x15 (YUV420SemiPlanar) ]
details: AMessage(what = 0x00000000) = {
string alignment = "2x2"
string bitrate-range = "1-10000000"
string block-size = "16x16"
string blocks-per-second-range = "1-244800"
int32_t feature-adaptive-playback = 0
string measured-frame-rate-176x144-range = "2635-2635"
string measured-frame-rate-480x368-range = "1738-1738"
string performance-point-1920x1080-range = "240-240"
string size-range = "48x48-1920x1088"
}
Decoder "OMX.google.mpeg4.decoder" supports
aliases: []
attributes: 0: [
encoder: 0,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 528
profile/levels: [
1/ 16 (Simple/3) ]
colors: [
0x7f420888 (YUV420Flexible),
0x13 (YUV420Planar) ]
details: AMessage(what = 0x00000000) = {
string alignment = "2x2"
string bitrate-range = "1-384000"
string block-size = "16x16"
string blocks-per-second-range = "12-11880"
int32_t feature-adaptive-playback = 0
string measured-frame-rate-176x144-range = "1140-1194"
string size-range = "2x2-352x288"
}
Media type 'video/mpeg2':
Decoder "OMX.Nvidia.mpeg2v.decode" supports
aliases: []
attributes: 0xa: [
encoder: 0,
vendor: 1,
software-only: 0,
hw-accelerated: 1 ]
owner: "default"
rank: 256
profile/levels: [
0/ 1 (Simple/ML),
1/ 3 (Main/HL) ]
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
string performance-point-1920x1080-range = "240-240"
string performance-point-3840x2160-range = "60-60"
string size-range = "32x32-3840x2176"
}
Media type 'video/wvc1':
Decoder "OMX.Nvidia.vc1.decode" supports
aliases: []
attributes: 0xa: [
encoder: 0,
vendor: 1,
software-only: 0,
hw-accelerated: 1 ]
owner: "default"
rank: 256
profile/levels: []
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-783360"
int32_t feature-adaptive-playback = 0
string performance-point-1920x1080-range = "240-240"
string size-range = "32x32-3840x2176"
}
Media type 'video/x-motion-jpeg':
Decoder "OMX.Nvidia.mjpeg.decoder" supports
aliases: []
attributes: 0xa: [
encoder: 0,
vendor: 1,
software-only: 0,
hw-accelerated: 1 ]
owner: "default"
rank: 256
profile/levels: []
colors: [
0x7f420888 (YUV420Flexible),
0x15 (YUV420SemiPlanar) ]
details: AMessage(what = 0x00000000) = {
string block-size = "16x16"
int32_t feature-adaptive-playback = 0
string performance-point-1920x1080-range = "30-30"
}
Media type 'video/x-ms-wmv':
Decoder "OMX.Nvidia.vc1.decode" supports
aliases, attributes, owner, rank: see above
profile/levels: []
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-783360"
int32_t feature-adaptive-playback = 0
string performance-point-1920x1080-range = "240-240"
string size-range = "32x32-3840x2176"
}
Media type 'video/x-vnd.on2.vp8':
Decoder "OMX.Nvidia.vp8.decode" supports
aliases: []
attributes: 0xa: [
encoder: 0,
vendor: 1,
software-only: 0,
hw-accelerated: 1 ]
owner: "default"
rank: 256
profile/levels: []
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-783360"
int32_t feature-adaptive-playback = 0
string measured-frame-rate-1280x720-range = "536-536"
string measured-frame-rate-1920x1088-range = "300-339"
string measured-frame-rate-320x192-range = "2057-2057"
string measured-frame-rate-640x368-range = "1438-1438"
string performance-point-1920x1080-range = "240-240"
string performance-point-3840x2160-range = "60-60"
string size-range = "48x48-3840x2176"
}
Decoder "OMX.google.vp8.decoder" supports
aliases: []
attributes: 0: [
encoder: 0,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 528
profile/levels: []
colors: [
0x7f420888 (YUV420Flexible),
0x13 (YUV420Planar) ]
details: AMessage(what = 0x00000000) = {
string alignment = "2x2"
string bitrate-range = "1-40000000"
string block-count-range = "1-16384"
string block-size = "16x16"
string blocks-per-second-range = "1-1000000"
int32_t feature-adaptive-playback = 0
string max-concurrent-instances = "27"
string measured-frame-rate-1280x720-range = "67-76"
string measured-frame-rate-1920x1080-range = "26-29"
string measured-frame-rate-320x180-range = "990-1087"
string measured-frame-rate-640x360-range = "324-351"
string size-range = "2x2-2048x2048"
}
Media type 'video/x-vnd.on2.vp9':
Decoder "OMX.Nvidia.vp9.decode" supports
aliases: []
attributes: 0xa: [
encoder: 0,
vendor: 1,
software-only: 0,
hw-accelerated: 1 ]
owner: "default"
rank: 256
profile/levels: [
1/ 512 (0/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
string measured-frame-rate-1280x720-range = "643-643"
string measured-frame-rate-1920x1088-range = "319-319"
string measured-frame-rate-320x192-range = "3400-3500"
string measured-frame-rate-640x368-range = "1532-1532"
string performance-point-3840x2160-range = "60-60"
string size-range = "144x144-3840x2176"
}
Decoder "OMX.Nvidia.vp9.decode.secure" supports
aliases: []
attributes: 0xa: [
encoder: 0,
vendor: 1,
software-only: 0,
hw-accelerated: 1 ]
owner: "default"
rank: 256
profile/levels: [
1/ 512 (0/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.vp9.decoder" supports
aliases: []
attributes: 0: [
encoder: 0,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 528
profile/levels: [
1/ 256 (0/5),
4/ 256 (2/5),
4096/ 256 (2HDR/5),
16384/ 256 (2HDRPlus/5) ]
colors: [
0x7f420888 (YUV420Flexible),
0x13 (YUV420Planar) ]
details: AMessage(what = 0x00000000) = {
string alignment = "2x2"
string bitrate-range = "1-40000000"
string block-count-range = "1-16384"
string block-size = "16x16"
string blocks-per-second-range = "1-500000"
int32_t feature-adaptive-playback = 0
string measured-frame-rate-1280x720-range = "94-103"
string measured-frame-rate-1920x1080-range = "52-57"
string measured-frame-rate-320x180-range = "682-753"
string measured-frame-rate-640x360-range = "287-313"
string size-range = "2x2-2048x2048"
}
Encoder infos by media types:
=============================
Media type 'audio/3gpp':
Encoder "OMX.google.amrnb.encoder" supports
aliases: []
attributes: 0x1: [
encoder: 1,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 16
profile/levels: []
colors: []
details: AMessage(what = 0x00000000) = {
string bitrate-range = "4750-12200"
string feature-bitrate-modes = "CBR"
string max-channel-count = "1"
string sample-rate-ranges = "8000"
}
Media type 'audio/amr-wb':
Encoder "OMX.google.amrwb.encoder" supports
aliases: []
attributes: 0x1: [
encoder: 1,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 16
profile/levels: []
colors: []
details: AMessage(what = 0x00000000) = {
string bitrate-range = "6600-23850"
string feature-bitrate-modes = "CBR"
string max-channel-count = "1"
string sample-rate-ranges = "16000"
}
Media type 'audio/flac':
Encoder "OMX.google.flac.encoder" supports
aliases: []
attributes: 0x1: [
encoder: 1,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 16
profile/levels: []
colors: []
details: AMessage(what = 0x00000000) = {
string bitrate-range = "1-21000000"
string complexity-default = "5"
string complexity-range = "0-8"
string feature-bitrate-modes = "CQ"
string max-channel-count = "2"
string sample-rate-ranges = "1-655350"
}
Media type 'audio/mp4a-latm':
Encoder "OMX.google.aac.encoder" supports
aliases: []
attributes: 0x1: [
encoder: 1,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 16
profile/levels: [
2/ 0 (LC/??),
5/ 0 (HE/??),
29/ 0 (HE_PS/??),
23/ 0 (LD/??),
39/ 0 (ELD/??) ]
colors: []
details: AMessage(what = 0x00000000) = {
string bitrate-range = "8000-960000"
string max-channel-count = "6"
string sample-rate-ranges = "8000,11025,12000,16000,22050,24000,32000,44100,48000"
}
Media type 'image/vnd.android.heic':
Encoder "OMX.Nvidia.h265.encoder" supports
aliases: []
attributes: 0xb: [
encoder: 1,
vendor: 1,
software-only: 0,
hw-accelerated: 1 ]
owner: "default"
rank: 256
profile/levels: [
1/32768 (??/??) ]
colors: [
0x7f420888 (YUV420Flexible),
0x13 (YUV420Planar),
0x15 (YUV420SemiPlanar),
0x7f000789 (Surface),
0x7ff00100 (??),
0x7ff00101 (??),
0x7ff00102 (??),
0x7ff00103 (??),
0x7ff00104 (??),
0x7ff00105 (??) ]
details: AMessage(what = 0x00000000) = {
string alignment = "2x2"
string bitrate-range = "1-50000000"
string block-size = "16x16"
string blocks-per-second-range = "1-783360"
string feature-bitrate-modes = "VBR,CBR,CQ"
string performance-point-3840x2160-range = "30-30"
string quality-default = "45"
string quality-range = "0-100"
string quality-scale = "linear"
string size-range = "96x96-3840x2176"
}
Media type 'video/3gpp':
Encoder "OMX.google.h263.encoder" supports
aliases: []
attributes: 0x1: [
encoder: 1,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 528
profile/levels: [
1/ 16 (Baseline/45) ]
colors: [
0x7f420888 (YUV420Flexible),
0x13 (YUV420Planar),
0x15 (YUV420SemiPlanar),
0x7f000789 (Surface) ]
details: AMessage(what = 0x00000000) = {
string alignment = "16x16"
string bitrate-range = "1-128000"
string measured-frame-rate-176x144-range = "643-656"
string size-range = "176x144-176x144"
}
Media type 'video/avc':
Encoder "OMX.Nvidia.h264.encoder" supports
aliases: []
attributes: 0xb: [
encoder: 1,
vendor: 1,
software-only: 0,
hw-accelerated: 1 ]
owner: "default"
rank: 256
profile/levels: [
8/65536 (High/5.2),
2/65536 (Main/5.2),
1/65536 (Baseline/5.2) ]
colors: [
0x7f420888 (YUV420Flexible),
0x13 (YUV420Planar),
0x15 (YUV420SemiPlanar),
0x7f000789 (Surface) ]
details: AMessage(what = 0x00000000) = {
string alignment = "2x2"
string bitrate-range = "1-50000000"
string block-size = "16x16"
string blocks-per-second-range = "1-783360"
string feature-bitrate-modes = "VBR,CBR"
string measured-frame-rate-1280x720-range = "130-192"
string measured-frame-rate-1920x1080-range = "70-95"
string measured-frame-rate-320x240-range = "760-902"
string measured-frame-rate-720x480-range = "280-387"
string performance-point-1920x1080-range = "240-240"
string performance-point-3840x2160-range = "30-30"
string size-range = "48x48-3840x2176"
}
Encoder "OMX.google.h264.encoder" supports
aliases: []
attributes: 0x1: [
encoder: 1,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 528
profile/levels: [
65536/ 4096 (ConstrainedBaseline/4.1),
1/ 4096 (Baseline/4.1),
2/ 4096 (Main/4.1) ]
colors: [
0x7f420888 (YUV420Flexible),
0x13 (YUV420Planar),
0x15 (YUV420SemiPlanar),
0x7f000789 (Surface) ]
details: AMessage(what = 0x00000000) = {
string alignment = "2x2"
string bitrate-range = "1-12000000"
string block-count-range = "1-8192"
string block-size = "16x16"
string blocks-per-second-range = "1-245760"
int32_t feature-intra-refresh = 0
string measured-frame-rate-1280x720-range = "88-112"
string measured-frame-rate-1920x1080-range = "45-56"
string measured-frame-rate-320x240-range = "490-610"
string measured-frame-rate-720x480-range = "170-200"
string size-range = "16x16-2048x2048"
}
Media type 'video/hevc':
Encoder "OMX.Nvidia.h265.encoder" supports
aliases, attributes, owner, rank: see above
profile/levels: [
1/32768 (Main/High 5) ]
colors: [
0x7f420888 (YUV420Flexible),
0x13 (YUV420Planar),
0x15 (YUV420SemiPlanar),
0x7f000789 (Surface),
0x7ff00100 (??),
0x7ff00101 (??),
0x7ff00102 (??),
0x7ff00103 (??),
0x7ff00104 (??),
0x7ff00105 (??) ]
details: AMessage(what = 0x00000000) = {
string alignment = "2x2"
string bitrate-range = "1-50000000"
string block-size = "16x16"
string blocks-per-second-range = "1-783360"
string feature-bitrate-modes = "VBR,CBR,CQ"
string measured-frame-rate-1280x720-range = "135-171"
string measured-frame-rate-1920x1080-range = "65-80"
string measured-frame-rate-320x240-range = "850-982"
string measured-frame-rate-3840x2160-range = "18-22"
string measured-frame-rate-720x480-range = "300-364"
string performance-point-3840x2160-range = "30-30"
string quality-default = "45"
string quality-range = "0-100"
string quality-scale = "linear"
string size-range = "96x96-3840x2176"
}
Media type 'video/mp4v-es':
Encoder "OMX.google.mpeg4.encoder" supports
aliases: []
attributes: 0x1: [
encoder: 1,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 528
profile/levels: [
4/ 8 (Core/2) ]
colors: [
0x7f420888 (YUV420Flexible),
0x13 (YUV420Planar),
0x15 (YUV420SemiPlanar),
0x7f000789 (Surface) ]
details: AMessage(what = 0x00000000) = {
string alignment = "16x16"
string bitrate-range = "1-64000"
string block-size = "16x16"
string blocks-per-second-range = "12-1485"
string measured-frame-rate-176x144-range = "689-754"
string size-range = "16x16-176x144"
}
Media type 'video/x-vnd.on2.vp8':
Encoder "OMX.Nvidia.vp8.encoder" supports
aliases: []
attributes: 0xb: [
encoder: 1,
vendor: 1,
software-only: 0,
hw-accelerated: 1 ]
owner: "default"
rank: 256
profile/levels: [
1/ 1 (Main/V0) ]
colors: [
0x7f420888 (YUV420Flexible),
0x13 (YUV420Planar),
0x15 (YUV420SemiPlanar),
0x7f000789 (Surface) ]
details: AMessage(what = 0x00000000) = {
string alignment = "2x2"
string bitrate-range = "1-50000000"
string block-size = "16x16"
string blocks-per-second-range = "1-783360"
string feature-bitrate-modes = "VBR,CBR"
string measured-frame-rate-1280x720-range = "114-145"
string measured-frame-rate-320x180-range = "841-854"
string measured-frame-rate-640x360-range = "363-421"
string performance-point-3840x2160-range = "30-30"
string size-range = "48x48-3840x2176"
}
Encoder "OMX.google.vp8.encoder" supports
aliases: []
attributes: 0x1: [
encoder: 1,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 528
profile/levels: [
1/ 1 (Main/V0),
1/ 2 (Main/V1),
1/ 4 (Main/V2),
1/ 8 (Main/V3) ]
colors: [
0x7f420888 (YUV420Flexible),
0x13 (YUV420Planar),
0x15 (YUV420SemiPlanar),
0x7f000789 (Surface) ]
details: AMessage(what = 0x00000000) = {
string alignment = "2x2"
string bitrate-range = "1-40000000"
string block-count-range = "1-16384"
string block-size = "16x16"
string feature-bitrate-modes = "VBR,CBR"
string measured-frame-rate-1280x720-range = "35-36"
string measured-frame-rate-1920x1080-range = "28-28"
string measured-frame-rate-320x180-range = "242-253"
string measured-frame-rate-640x360-range = "114-116"
string size-range = "2x2-2048x2048"
}
Media type 'video/x-vnd.on2.vp9':
Encoder "OMX.google.vp9.encoder" supports
aliases: []
attributes: 0x1: [
encoder: 1,
vendor: 0,
software-only: 0,
hw-accelerated: 0 ]
owner: "default"
rank: 528
profile/levels: [
1/ 128 (0/4.1) ]
colors: [
0x7f420888 (YUV420Flexible),
0x13 (YUV420Planar),
0x15 (YUV420SemiPlanar),
0x7f000789 (Surface) ]
details: AMessage(what = 0x00000000) = {
string alignment = "2x2"
string bitrate-range = "1-40000000"
string block-count-range = "1-3600"
string block-size = "16x16"
string feature-bitrate-modes = "VBR,CBR"
string size-range = "2x2-2048x2048"
}
No media recorder client
Files opened and/or mapped:
/proc/3375/fd/8 -> /data/app/~~mKbM3aLmd0dExMDREFTz0w==/flar2.homebutton-9BZuD8VrbsDMcgAzCy0Dyg==/base.apk
sif:/ $
2019 shield Tegra X1
unrelated, OMX.google.vorbis.decoder, the device has vorbis support but I have notice the app transcode the audio.
@MichaelRUSF Have been testing different device that says it supports 5.2 but still trancecodes, not sure if this is any help to you
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) ]
colors: [
0x7f420888 (YUV420Flexible),
0x13 (YUV420Planar),
0x15 (YUV420SemiPlanar),
0x14 (YUV420PackedPlanar),
0x27 (YUV420PackedSemiPlanar) ]
details: AMessage(what = 0x00000000) = {
string measured-frame-rate-1280x720-range = "28-29"
string measured-frame-rate-1920x1080-range = "20-20"
string measured-frame-rate-352x288-range = "105-106"
string measured-frame-rate-640x360-range = "59-60"
string measured-frame-rate-720x480-range = "56-57"
string alignment = "2x2"
string bitrate-range = "1-5000000"
string block-count-range = "1-65536"
string block-size = "8x8"
string blocks-per-second-range = "1-491520"
int32_t feature-adaptive-playback = 0
string size-range = "2x2-2048x2048"
}
Can confirm HEVC main 10 level 5.2 does not direct play on the shield pro using the jellyfin app. I can use the external player "just player" and it works just fine.
Logs:
[2024-08-16 19:29:36.933 -05:00] [INF] "/usr/lib/jellyfin-ffmpeg/ffmpeg" "-analyzeduration 200M -probesize 1G -init_hw_device vaapi=va:,kernel_driver=i915,driver=iHD -init_hw_device qsv=qs@va -filter_hw_device qs -hwaccel vaapi -hwaccel_output_format vaapi -noautorotate -i file:\"/downloads/done/Empire.Strikes.Back.4K80.2160p.UHD.no-DNR.35mm.x265-v1.0/03 Empire.Strikes.Back.4K80.2160p.UHD.no-DNR.35mm.x265-v1.0.mkv\" -noautoscale -map_metadata -1 -map_chapters -1 -threads 0 -map 0:0 -map 0:2 -map -0:s -codec:v:0 hevc_qsv -tag:v:0 hvc1 -low_power 1 -preset veryslow -b:v 66645189 -maxrate 66645189 -bufsize 133290378 -profile:v:0 main -level 50 -g:v:0 72 -keyint_min:v:0 72 -vf \"setparams=color_primaries=bt709:color_trc=bt709:colorspace=bt709,scale_vaapi=format=nv12:extra_hw_frames=24,hwmap=derive_device=qsv,format=qsv\" -codec:a:0 copy -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 3 -hls_segment_type mpegts -start_number 0 -hls_segment_filename \"/var/lib/jellyfin/transcodes/73bcedeaebcc82e53f2ab9946dee9eb6%d.ts\" -hls_playlist_type vod -hls_list_size 0 -y \"/var/lib/jellyfin/transcodes/73bcedeaebcc82e53f2ab9946dee9eb6.m3u8\""
[2024-08-16 19:29:41.479 -05:00] [INF] Stopping ffmpeg process with q command for "/var/lib/jellyfin/transcodes/73bcedeaebcc82e53f2ab9946dee9eb6.m3u8"
[2024-08-16 19:29:41.644 -05:00] [INF] FFmpeg exited with code 0
FFMPEG
Stream #0:0(eng): Video: hevc (Main 10), yuv420p10le(tv, bt709), 3840x2160 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn (default)
Metadata:
BPS : 52982644
DURATION : 02:05:59.302000000
NUMBER_OF_FRAMES: 181242
NUMBER_OF_BYTES : 50063976014
_STATISTICS_WRITING_APP: mkvmerge v82.0 ('I'm The President') 64-bit
_STATISTICS_WRITING_DATE_UTC: 2024-02-12 17:38:32
_STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
Stream #0:1(eng): Audio: dts (DTS-HD MA), 48000 Hz, stereo, s16p (default)
Metadata:
title : 35mm Mix (Laserdisc Sourced, Adjusted by Hairy Hen to match the 35mm optical sound)
BPS : 929200
DURATION : 02:04:53.206000000
NUMBER_OF_FRAMES: 702488
NUMBER_OF_BYTES : 870336168
_STATISTICS_WRITING_APP: mkvmerge v82.0 ('I'm The President') 64-bit
_STATISTICS_WRITING_DATE_UTC: 2024-02-12 17:38:32
_STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
---
Stream mapping:
Stream #0:0 -> #0:0 (hevc (native) -> hevc (hevc_qsv))
Stream #0:2 -> #0:1 (copy)
Press [q] to stop, [?] for help
libva info: VA-API version 1.22.0
libva info: Trying to open /usr/lib/jellyfin-ffmpeg/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
libva info: VA-API version 1.22.0
libva info: Trying to open /usr/lib/jellyfin-ffmpeg/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
Output #0, hls, to '/var/lib/jellyfin/transcodes/73bcedeaebcc82e53f2ab9946dee9eb6.m3u8':
Metadata:
encoder : Lavf60.3.100
Stream #0:0: Video: hevc (hvc1 / 0x31637668), qsv(tv, bt709, progressive), 3840x2160 [SAR 1:1 DAR 16:9], q=2-31, 66645 kb/s, 23.98 fps, 90k tbn (default)
Metadata:
encoder : Lavc60.3.100 hevc_qsv
Side data:
cpb: bitrate max/min/avg: 66645189/0/66645189 buffer size: 133290378 vbv_delay: N/A
Stream #0:1: Audio: ac3, 48000 Hz, stereo, fltp, 384 kb/s (default)
frame= 0 fps=0.0 q=0.0 size=N/A time=00:00:00.00 bitrate=N/A speed= 0x
Is there any fix in the works? Do we have to use external players on the Shield now?
Can we please take option 3 in the short term, the shield is ubiquitous as is the fire stick. That or an option to manually select hevc level? I remember that option existing at some point... Maybe on the JF tizen fork? That or it was on android tv/jf Plex app.
Describe the bug
I knew something was going on when the media was slow to play or the subtitles skipped ahead.
Reason for transcoding: The video codec's level is not supported
I think this https://github.com/jellyfin/jellyfin-androidtv/pull/3281 has effected HEVC support on devices that once supported it.
Codec: HEVC Profile: Main 10 Level: 156 Resolution: 1920x1080 Aspect ratio: 16:9
@lawadr @nielsvanvelzen pinging both of you because the pull request has effected playback.
Logs
Stream mapping: Stream #0:0 -> #0:0 (hevc (native) -> h264 (libx264)) Stream #0:1 -> #0:1 (copy) Press [q] to stop, [?] for help [libx264 @ 0x563eef26b080] using SAR=1/1 [libx264 @ 0x563eef26b080] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2 [libx264 @ 0x563eef26b080] profile Main, level 4.0, 4:2:0, 8-bit
"SupportsTranscoding":true,"SupportsDirectStream":true,"SupportsDirectPlay":true
Application version
v0.16.5
Where did you install the app from?
Sideloaded APK
Device information
Shield
Android version
Android 11
Jellyfin server version
10.8.13