Status
Not open for further replies.

Suslik V

Active Member
I mean what it do? I have read description and as I see no benefits for "1" and "2" setting. How you mark frames for references if this set to custom?
 

Xaymar

Active Member
You don't manually mark the frame as reference. The encoder does. I can override what frames are marked as LTR if I wanted to, but it is usually not needed.

Edit: As for what it does, LTR frames are literally long term reference frames. They are used for future encoding and afaik use Intra-Refresh encoding too. x264 has something similar.
 

Suslik V

Active Member
Do you have your own algorithm to override? Or you can override? Because, OBS Studio also can override some options but features not implemented for long.
 

Xaymar

Active Member
Do you have your own algorithm to override? Or you can override? Because, OBS Studio also can override some options but features not implemented for long.
I'm sorry, but I don't understand what you're trying to ask of me. Are you trying to tell me to remove that option because I didn't write the algorithm myself? Are you trying to tell me that i should give the user the option to flag certain frames during live encoding as reference frames? Or are you trying to tell me that I should override the AMF behaviour (which is pretty good already IMO) in favor of my own?
 

Suslik V

Active Member
As I see, that was named "LTR" has no influence on encoding as it's only a feature of AMF - it allows to switch on (override) reference assignments - switcher for the feature to turn it ON/OFF, but the feature (custom assignment by some algorithm maybe) not implemented yet?

This meaning of "Feature" (for AMF based encoder plugin) is it right for MaxLTR? Because abbreviation of the the word has "Reference" and I can translate it according to the H.264, but I feel that isn't right and the parameter itself hasn't influence on the references itself (by current implementation of the plugin). But it can switch something related to the references frames.

So, I'm asking for two things (first can improve translation, second - saves time for translation):
  1. If this has influence on references, then we need it in description, because "References" mentioned by the name.
  2. If feature not implemented yet, you better to disable it or remove (I understand you can use it for future implementations, but I don't like empty switch for now).
 

Xaymar

Active Member
As I see, that was named "LTR" has no influence on encoding as it's only a feature of AMF - it allows to switch on (override) reference assignments - switcher for the feature to turn it ON/OFF, but the feature (custom assignment by some algorithm maybe) not implemented yet?

I... what? It's implemented in hardware, there is nothing I have to do - it's in, it's being set, it's up to the hardware to decide the best use case.

This meaning of "Feature" (for AMF based encoder plugin) is it right for MaxLTR? Because abbreviation of the the word has "Reference" and I can translate it according to the H.264, but I feel that isn't right and the parameter itself hasn't influence on the references itself (by current implementation of the plugin). But it can switch something related to the references frames.

Again, what? I think you're trying to fit too much information and questions into the same sentence and in the end just made it incredibly difficult to understand.

The Term "Long-Term-Reference Frames" is literally that. It is something that the hardware uses to flag certain frames within a GOP as reference for future encoding.

So, I'm asking for two things (first can improve translation, second - saves time for translation):
  1. If this has influence on references, then we need it in description, because "References" mentioned by the name.
  2. If feature not implemented yet, you better to disable it or remove (I understand you can use it for future implementations, but I don't like empty switch for now).

  1. I don't know what you mean by references. It doesn't have a direct effect, but can provide better encoding on cards without B-Pictures, which is where it is enabled by default. It merely allows the encoder to use two additional frames for long term (entire GOP) reference for encoding/decoding.
  2. Again, the feature is implemented in hardware. It's not an empty switch, it's a slider and it is applied as far as I know.
 

Suslik V

Active Member
  1. You think encoder cannot use LTR when MaxOfLTRFrames=0 on cards without B-Pictures support?
  2. And all your footage with this encoder has 0 LTR frames when MaxOfLTRFrames=0?
 

Xaymar

Active Member
  1. You think encoder cannot use LTR when MaxOfLTRFrames=0 on cards without B-Pictures support?
  2. And all your footage with this encoder has 0 LTR frames when MaxOfLTRFrames=0?

  1. It can when it needs to. It doesn't when it doesn't need to.
  2. When B-Pictures are enabled, yes. Which they always are for me because I don't actually use the new 'Master' view mode which would show the Max LTR Frames option.

Listen, if you don't like something change it yourself. The code is on github, clone it, change what is needed, document why you made the change and explain it and submit a PR. If not, well you're going to have to live with that option existing.
 

Xaymar

Active Member
1.4.0.0 should be ready soon-ish, some typo's left and some testing to do before I make a PR on the obs-studio github for the update.
 

seronx

New Member
HEVC support depends on multiple factors:

  • Widespread Support
    HEVC/H.265 is currently less supported by the mobile market than VP9 is and it will probably be another 5 years until it makes a mainstream appearance. Same thing happened with AVC/H.264.
  • Better Streaming Protocols
    FLV/RTMP currently only support AVC/H.264, until that changes HEVC/H.265 won't get any good support from Streaming sites or similar. The largest ones here are probably Twitch and YouTube which would have to be the first ones to switch over.
  • OBS Studio needs to support H.265
    I'm not sure if it already does, since it uses ffmpeg for muxing.
  • Driver Support
    HEVC encoding is already there if you decide to use Windows Media Foundation Transcode - one of the worst options ever because it's rather undocumented and weird. Right now, HEVC does not seem to be supported yet by AMF, so there is only so much that can be done on my end.
So it depends on the following: A new streaming Protocol, Device Vendors (especially mobile devices), Streaming sites, OBS Studio and AMD. Support for HEVC is technically already built into the plugin, so there's not much to do there.

At a bitrate of 2500, it's better to use x264. Hardware encoding will probably take a long time before it gets better at what it should be good at.
Widespread Support; HEVC is supported in every 2015+, smartphone to desktop device.

Better Streaming Protocols; HEVC is supported by UDP, RTP, RTMP, RTSP, HLS and MPEG-DASH. Just no one actually updated their whatevers to allow ingest / outgest functions for it. (Like, the license allows for if you have h264 already, you can waive and get h265 for FREE) (<-- That is how awkward the industry is... they simply don't want HEVC for FREE)

OBS Studio: No one has forked and added it yet.

HEVC Encoding; Is there for the big three: Intel QuickSync, Nvidia NVENC, and AMD's VCE for their respective Media Foundations. No idea, why they don't show up for anyone else.

It is really awkward when DivX and other obscured/olde players get HEVC first: http://labs.divx.com/hevc-hwaccel-skylake

Just to fling it out VP9 will be fully supported in 2017+, phone to desktop. That is a whole two year difference between full H265 support and full VP9 support. @Youtube, @Twitch, @Vimeo, or whatever... Get with the times its FREE if you do h264 already!
 
Last edited:

Xaymar

Active Member
Your opinion is valued @seronx, however it doesn't help this project at all.
We need to wait for AMD to support HEVC encoding in their SDK and then for me to get a RX 4xx for testing it. Remote coding just won't do in this case.
 

Flaim

New Member
got a weird bug.
for some reason the encoder goes nuts when there's too much stuff around and i can't figure out what setting might be causing it. i've tried literally every single one of them.

the bug in action: https://youtu.be/OGRWw3oGpV8?t=230
forcing it hardcore: https://gaming.youtube.com/watch?v=JolwzJucI7k (gaming link because on regular it fails to process)

the hardcore forcing happened via a batch file of this code:
Code:
echo off
title Stream Test
MODE CON COLS=1280 LINES=720
:begin

echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random% 

echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%

echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%

echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%

echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%

echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%

echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%

echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%

echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%

echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%

echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%

echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%

echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%

echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%

echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%
goto :begin

Radeon Crimson version 16.10.3
tell me if there's more that you need to know that's not in the log.
 

Attachments

  • 2016-11-02 22-30-39.txt
    19.8 KB · Views: 24

Xaymar

Active Member
got a weird bug.
for some reason the encoder goes nuts when there's too much stuff around and i can't figure out what setting might be causing it. i've tried literally every single one of them.

the bug in action: https://youtu.be/OGRWw3oGpV8?t=230
forcing it hardcore: https://gaming.youtube.com/watch?v=JolwzJucI7k (gaming link because on regular it fails to process)

the hardcore forcing happened via a batch file of this code:

Radeon Crimson version 16.10.3
tell me if there's more that you need to know that's not in the log.

To quote your log file:

Code:
22:32:18.671: [AMF Encoder] <AMFEncoder::H264Interface::H264Interface> Initializing...

You are using the [Advanced] interface which will be removed in the future and is not supported. Any issues reported with it will not be considered valid since they usually come from the configuration the user forced onto the program.

In your case, that would be:

Code:
22:32:18.681: [AMF Encoder] Minimum: 18
22:32:18.681: [AMF Encoder] Maximum: 35
22:32:18.681: [AMF Encoder]   GOP Size: 30 frames
22:32:18.681: [AMF Encoder]   CABAC: Enabled

Change those to their defaults and Min/Max QP to 0/51 and you should see wonders happening.

You'd have known all this if you read the https://github.com/Xaymar/obs-studio_amf-encoder-plugin/wiki/Troubleshooting-Guide.
 

Flaim

New Member
Change those to their defaults and Min/Max QP to 0/51 and you should see wonders happening.

You'd have known all this if you read the https://github.com/Xaymar/obs-studio_amf-encoder-plugin/wiki/Troubleshooting-Guide.
i'm sorry. you're a god. tried resetting them one by one, which obiously couldnt help...
that fixed it during gameplay, but the quality of the randomly generated numbers got really dumpstered.
i mean it's obvious that this happens when maxQP is being increased.
at least the visual glitches are gone without the gameplay taking a massive hit :)
https://www.youtube.com/watch?v=HkQ03SIPHjg
3:14 starts the gameplay

again, thanks for your help and sorry for my retardness.
 

Xaymar

Active Member
I have reported the Variable Bitrate problem to the GPUOpen Team working on the AMF SDK & Runtime now. You can find it here: https://github.com/GPUOpen-LibrariesAndSDKs/AMF/issues/39

The state VBR is at right now seems to be to always target 20mbit/s, no matter what the scene is. All constraints but Min/Max QP are ignored, which would actually make VBR more like Constrained QP.
 

Suslik V

Active Member
I have one more question (about encoder development, code)

can you explain how this works:

double_t interpVal = (sin(min(max(strictness, 1.0), 0.0) * 90 * (PI / 180))); ?

I not familiar with c++ a lot, so I'm interesting in this part -->> min(max(strictness, 1.0), 0.0)
Or strictness can take negative values and all thing is right? I assume, that max returns the largest of a and b. And min returns the smallest of a and b.
Sorry for the question in this thread. If I were programmer I would make a new thread in other part of the forum. But as any amateur, just wondering how it works. And all this because of VBV Strictness translation ^_^
 

Xaymar

Active Member
I have one more question (about encoder development, code)

can you explain how this works:

double_t interpVal = (sin(min(max(strictness, 1.0), 0.0) * 90 * (PI / 180))); ?

I not familiar with c++ a lot, so I'm interesting in this part -->> min(max(strictness, 1.0), 0.0)
Or strictness can take negative values and all thing is right? I assume, that max returns the largest of a and b. And min returns the smallest of a and b.
Sorry for the question in this thread. If I were programmer I would make a new thread in other part of the forum. But as any amateur, just wondering how it works. And all this because of VBV Strictness translation ^_^

Explaining in how it would be executed:
  1. Limit 'strictness' between 0 and 1.
  2. Convert strictness to radians for sinus curve
  3. Use sinus curve to fade between loose (0) and strict (1).
Strictness here means how strictly it should follow the constraints given (Target Bitrate or Peak Bitrate, depending on situation).
 
Status
Not open for further replies.
Top