Dolby Vision and 1.15.1

Please post here for issues related to UHD discs
Message
Author
shawnc22
Posts: 637
Joined: Tue Jan 21, 2020 7:40 am

Re: Dolby Vision and 1.15.1

#436 Post by shawnc22 » Wed May 20, 2020 4:01 pm

A quick test this morning:

https://drive.google.com/open?id=12-qTG ... CY0G7P1k_G

Atmos+PGS subtitles look good in mkv.

The current PGS subtitle issue is likely one with exoplayer and the TS container. The shield plex stacktrace from a TS file when PGS is selected:

Code: Select all

05-20 08:51:50.711  e: [Exo2VideoPlayer] Player error detected
05-20 08:51:50.711  e: An exception occurred: com.google.android.exoplayer2.r: com.google.android.exoplayer2.x0.g: Unexpected decoder error occurred
05-20 08:51:50.711  e: Stacktrace: com.google.android.exoplayer2.r: com.google.android.exoplayer2.x0.g: Unexpected decoder error occurred
	at com.google.android.exoplayer2.x0.l.render(SourceFile:42)
	at com.google.android.exoplayer2.v.e(SourceFile:14)
	at com.google.android.exoplayer2.v.handleMessage(SourceFile:17)
	at android.os.Handler.dispatchMessage(Handler.java:102)
	at android.os.Looper.loop(Looper.java:193)
	at android.os.HandlerThread.run(HandlerThread.java:65)
Caused by: com.google.android.exoplayer2.x0.g: Unexpected decoder error occurred
	at com.plexapp.plex.videoplayer.local.k.n.b.a(SourceFile:15)
	at com.plexapp.plex.videoplayer.local.k.n.b.a(SourceFile:2)
	at com.google.android.exoplayer2.t0.g.d(SourceFile:17)
	at com.google.android.exoplayer2.t0.g.g(SourceFile:1)
	at com.google.android.exoplayer2.t0.g.a(SourceFile:1)
	at com.google.android.exoplayer2.t0.g$a.run(SourceFile:1)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'long com.plexapp.plex.videoplayer.local.k.n.c.g.b.b()' on a null object reference
	at com.plexapp.plex.videoplayer.local.k.n.c.e.a(SourceFile:6)
	at com.plexapp.plex.videoplayer.local.k.n.c.d.a(SourceFile:5)
	at com.plexapp.plex.videoplayer.local.k.n.b.a(SourceFile:17)
	at com.plexapp.plex.videoplayer.local.k.n.b.a(SourceFile:3)
	at com.google.android.exoplayer2.t0.g.d(SourceFile:15)
	... 3 more

05-20 08:51:50.712  i: [Exo2VideoPlayer] Local subtitles failed to load

steffenmanden
Posts: 75
Joined: Sat Aug 31, 2019 8:49 pm

Re: Dolby Vision and 1.15.1

#437 Post by steffenmanden » Wed May 20, 2020 4:06 pm

shawnc22 wrote:
Wed May 20, 2020 4:01 pm
A quick test this morning:

https://drive.google.com/open?id=12-qTG ... CY0G7P1k_G

Atmos+PGS subtitles look good in mkv.

The current PGS subtitle issue is likely one with exoplayer and the way PGS subtitles are stored in the TS container. The shield plex stacktrace from a TS file when PGS is selected:

Code: Select all

05-20 08:51:50.711  e: [Exo2VideoPlayer] Player error detected
05-20 08:51:50.711  e: An exception occurred: com.google.android.exoplayer2.r: com.google.android.exoplayer2.x0.g: Unexpected decoder error occurred
05-20 08:51:50.711  e: Stacktrace: com.google.android.exoplayer2.r: com.google.android.exoplayer2.x0.g: Unexpected decoder error occurred
	at com.google.android.exoplayer2.x0.l.render(SourceFile:42)
	at com.google.android.exoplayer2.v.e(SourceFile:14)
	at com.google.android.exoplayer2.v.handleMessage(SourceFile:17)
	at android.os.Handler.dispatchMessage(Handler.java:102)
	at android.os.Looper.loop(Looper.java:193)
	at android.os.HandlerThread.run(HandlerThread.java:65)
Caused by: com.google.android.exoplayer2.x0.g: Unexpected decoder error occurred
	at com.plexapp.plex.videoplayer.local.k.n.b.a(SourceFile:15)
	at com.plexapp.plex.videoplayer.local.k.n.b.a(SourceFile:2)
	at com.google.android.exoplayer2.t0.g.d(SourceFile:17)
	at com.google.android.exoplayer2.t0.g.g(SourceFile:1)
	at com.google.android.exoplayer2.t0.g.a(SourceFile:1)
	at com.google.android.exoplayer2.t0.g$a.run(SourceFile:1)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'long com.plexapp.plex.videoplayer.local.k.n.c.g.b.b()' on a null object reference
	at com.plexapp.plex.videoplayer.local.k.n.c.e.a(SourceFile:6)
	at com.plexapp.plex.videoplayer.local.k.n.c.d.a(SourceFile:5)
	at com.plexapp.plex.videoplayer.local.k.n.b.a(SourceFile:17)
	at com.plexapp.plex.videoplayer.local.k.n.b.a(SourceFile:3)
	at com.google.android.exoplayer2.t0.g.d(SourceFile:15)
	... 3 more

05-20 08:51:50.712  i: [Exo2VideoPlayer] Local subtitles failed to load
Great! I was also almost certain that it was a container issue and not a player issue :)

ragico
Posts: 258
Joined: Fri Feb 15, 2019 1:09 am

Re: Dolby Vision and 1.15.1

#438 Post by ragico » Wed May 20, 2020 5:01 pm

shawnc22 wrote:
Wed May 20, 2020 2:25 am
had some free time after work today:

https://drive.google.com/open?id=1Fm1r6 ... NmxBJsH6AS

it's a promising start :)
Tested on Sony X700. The TV (Panasonic GZ2000) triggers DV but the X700 info display triggers HDR.

steffenmanden
Posts: 75
Joined: Sat Aug 31, 2019 8:49 pm

Re: Dolby Vision and 1.15.1

#439 Post by steffenmanden » Wed May 20, 2020 7:02 pm

ragico wrote:
Wed May 20, 2020 5:01 pm
shawnc22 wrote:
Wed May 20, 2020 2:25 am
had some free time after work today:

https://drive.google.com/open?id=1Fm1r6 ... NmxBJsH6AS

it's a promising start :)
Tested on Sony X700. The TV (Panasonic GZ2000) triggers DV but the X700 info display triggers HDR.
im confused, the x700 runs exoplayer??

ragico
Posts: 258
Joined: Fri Feb 15, 2019 1:09 am

Re: Dolby Vision and 1.15.1

#440 Post by ragico » Wed May 20, 2020 8:06 pm

steffenmanden wrote:
Wed May 20, 2020 7:02 pm
ragico wrote:
Wed May 20, 2020 5:01 pm
shawnc22 wrote:
Wed May 20, 2020 2:25 am
had some free time after work today:

https://drive.google.com/open?id=1Fm1r6 ... NmxBJsH6AS

it's a promising start :)
Tested on Sony X700. The TV (Panasonic GZ2000) triggers DV but the X700 info display triggers HDR.
im confused, the x700 runs exoplayer??
No, I played from the hard disk attached to the player usb port.

Krawk
Posts: 276
Joined: Thu Jul 02, 2015 12:10 am

Re: Dolby Vision and 1.15.1

#441 Post by Krawk » Wed May 20, 2020 9:40 pm

flashback8 wrote:
Wed Apr 15, 2020 7:01 pm
Thanks! Been waiting for this one for a long time. I'll have to fire up the Oppo and see how it handles the MKV. I'm not counting on anything but it would be awesome if it somehow used the DV layer.

EDIT: As expected, the MKV plays only as HDR10 on the Oppo. A shame but very much expected. It's still nice to have an essentially lossless backup method that isn't TS files. :)
Not surprised as Oppo claims to follow the "standard" format. I tried getting them to implement the 'forced subtitles' track but they said it wasn't part of the standard. So if you watch a Star Wars media file you have to remember to enable the alien dialog.
Hopefully DV will get a finalized version and the fine folks at Oppo will do a FW upgrade.

DaMacFunkin
Posts: 311
Joined: Tue Oct 30, 2018 4:17 pm

Re: Dolby Vision and 1.15.1

#442 Post by DaMacFunkin » Thu May 21, 2020 5:11 am

Krawk wrote:
Wed May 20, 2020 9:40 pm
flashback8 wrote:
Wed Apr 15, 2020 7:01 pm
Thanks! Been waiting for this one for a long time. I'll have to fire up the Oppo and see how it handles the MKV. I'm not counting on anything but it would be awesome if it somehow used the DV layer.

EDIT: As expected, the MKV plays only as HDR10 on the Oppo. A shame but very much expected. It's still nice to have an essentially lossless backup method that isn't TS files. :)
Not surprised as Oppo claims to follow the "standard" format. I tried getting them to implement the 'forced subtitles' track but they said it wasn't part of the standard. So if you watch a Star Wars media file you have to remember to enable the alien dialog.
Hopefully DV will get a finalized version and the fine folks at Oppo will do a FW upgrade.
I remember seeing that Oppo said Dolby wouldn’t licence the internal hdr to Dolby tone mapping for MKV container so don’t hold your breath... as well as that Oppo is defunct, hasn’t been a bug fix for 15 months.

steffenmanden
Posts: 75
Joined: Sat Aug 31, 2019 8:49 pm

Re: Dolby Vision and 1.15.1

#443 Post by steffenmanden » Thu May 21, 2020 2:27 pm

ragico wrote:
Wed May 20, 2020 8:06 pm
steffenmanden wrote:
Wed May 20, 2020 7:02 pm
ragico wrote:
Wed May 20, 2020 5:01 pm


Tested on Sony X700. The TV (Panasonic GZ2000) triggers DV but the X700 info display triggers HDR.
im confused, the x700 runs exoplayer??
No, I played from the hard disk attached to the player usb port.
But the addition is only through exoplayer so far (and only if you build an apk from yusescope's code) :) I would be surprised if an existing player could play dolby vision this way as it was previously not part of the standard

Donpoku
Posts: 62
Joined: Wed Jul 03, 2019 3:43 pm

Re: Dolby Vision and 1.15.1

#444 Post by Donpoku » Thu May 21, 2020 2:41 pm

Yusesope m8 I tip my hat to you , you're simply amazing.

And thanks steffenmanden & shawnc22 for contributing and making all our hopes come to reality.

I'm sure mike and mortiz will be along soon to help get this over the line.

Thank you all really appreciate the combine effort of realising the impossible possible.

yusesope
Posts: 221
Joined: Sun Jul 28, 2019 3:34 am

Re: Dolby Vision and 1.15.1

#445 Post by yusesope » Thu May 21, 2020 3:04 pm

shawnc22 wrote:
Tue May 19, 2020 6:54 pm
I will give this a try over the upcoming long weekend...
steffenmanden wrote:
Tue May 19, 2020 8:13 pm
ill try to give it a look this weekend - let us know if you do more!
I tried to clean up the code and make it more OOP.
You can download the new code HERE.


I have created three new classes:

Code: Select all

DataExtensionBlocks.java
ExtensionBlock.java
ExtensionBlocksParser.java
They must be copied to the folder

Code: Select all

ExoPlayer-release-v2\library\core\src\main\java\com\google\android\exoplayer2\extractor\mkv

Replace the following files again with those found in the archive.

Code: Select all

ExoPlayer-release-v2\library\core\src\main\java\com\google\android\exoplayer2\video\HevcConfig.java
ExoPlayer-release-v2\library\core\src\main\java\com\google\android\exoplayer2\extractor\mkv\MatroskaExtractor.java
ExoPlayer-release-v2\demos\main\src\main\AndroidManifest.xml

The whole logic is contained within the MatroskaExtractor.java file (always after "case CODEC_ID_H265:")

Code: Select all

DataExtensionBlocks dataExtensionBlocks = DataExtensionBlocks.analyze(
    new ParsableByteArray(codecPrivate),
    hevcConfig.csdEndPosition
);
if (dataExtensionBlocks.exist){
  List<ExtensionBlock> extensionBlocksList = ExtensionBlocksParser.parse(
      dataExtensionBlocks.content
  );
  for (ExtensionBlock extensionBlock: extensionBlocksList){
    switch (extensionBlock.getType()){
      case ExtensionBlock.TYPE_dvcC:
        DolbyVisionConfig dolbyVisionConfig = DolbyVisionConfig.parse(extensionBlock.getContent());
        if (dolbyVisionConfig != null) {
          codecs = dolbyVisionConfig.codecs;
          mimeType = MimeTypes.VIDEO_DOLBY_VISION;
        }
        break;
      case ExtensionBlock.TYPE_hvcE:
        HevcConfig enhancementLayersHevcConfig = HevcConfig.parse(extensionBlock.getContent());
        logEnhancementLayerHevcConfig(enhancementLayersHevcConfig.initializationData.get(0));
        //TODO: The thing now is to figure out how to implement enhancementLayersHevcConfig.
        //TODO: Please, delete the call to logEnhancementLayerHevcConfig and its Declaration.
        //TODO: ExtensionBlock.TYPE_mvcC Multiview Video Coding (MVC) is H.264/MPEG-4 AVC extension. It doesn't belong here!!
        break;
      default:
        Log.e("yusesope says","Something bad has happened!");
    }
  }
}
I leave it up to you to decide if the code is good or it isn't: feel free to change what you think is wrong (and maybe I end up learning something if you explain why).


The names of the variables are deliberately very long because I wanted everything to be as clear as possible.
I have not completed the implementation of "TYPE_mvcC" because it is an extension of H.264/MPEG-4 AVC and in my opinion it is a bit off-topic (we are interested in Dolby Vision!!! Who is still watching 3D movies?)


The various blocks are still analyzed in the "new" way.
In the ExtensionBlocksParser.java file I explain what to modify to activate the "old" way.


Everything should be easily expandable in the future: just simply declare any future blocks (TYPE_XXXX = 0xXXXXXXXX;) inside the ExtensionBlock.java file

steffenmanden
Posts: 75
Joined: Sat Aug 31, 2019 8:49 pm

Re: Dolby Vision and 1.15.1

#446 Post by steffenmanden » Thu May 21, 2020 3:32 pm

yusesope wrote:
Thu May 21, 2020 3:04 pm
shawnc22 wrote:
Tue May 19, 2020 6:54 pm
I will give this a try over the upcoming long weekend...
steffenmanden wrote:
Tue May 19, 2020 8:13 pm
ill try to give it a look this weekend - let us know if you do more!
I tried to clean up the code and make it more OOP.
You can download the new code HERE.


I have created three new classes:

Code: Select all

DataExtensionBlocks.java
ExtensionBlock.java
ExtensionBlocksParser.java
They must be copied to the folder

Code: Select all

ExoPlayer-release-v2\library\core\src\main\java\com\google\android\exoplayer2\extractor\mkv

Replace the following files again with those found in the archive.

Code: Select all

ExoPlayer-release-v2\library\core\src\main\java\com\google\android\exoplayer2\video\HevcConfig.java
ExoPlayer-release-v2\library\core\src\main\java\com\google\android\exoplayer2\extractor\mkv\MatroskaExtractor.java
ExoPlayer-release-v2\demos\main\src\main\AndroidManifest.xml

The whole logic is contained within the MatroskaExtractor.java file (always after "case CODEC_ID_H265:")

Code: Select all

DataExtensionBlocks dataExtensionBlocks = DataExtensionBlocks.analyze(
    new ParsableByteArray(codecPrivate),
    hevcConfig.csdEndPosition
);
if (dataExtensionBlocks.exist){
  List<ExtensionBlock> extensionBlocksList = ExtensionBlocksParser.parse(
      dataExtensionBlocks.content
  );
  for (ExtensionBlock extensionBlock: extensionBlocksList){
    switch (extensionBlock.getType()){
      case ExtensionBlock.TYPE_dvcC:
        DolbyVisionConfig dolbyVisionConfig = DolbyVisionConfig.parse(extensionBlock.getContent());
        if (dolbyVisionConfig != null) {
          codecs = dolbyVisionConfig.codecs;
          mimeType = MimeTypes.VIDEO_DOLBY_VISION;
        }
        break;
      case ExtensionBlock.TYPE_hvcE:
        HevcConfig enhancementLayersHevcConfig = HevcConfig.parse(extensionBlock.getContent());
        logEnhancementLayerHevcConfig(enhancementLayersHevcConfig.initializationData.get(0));
        //TODO: The thing now is to figure out how to implement enhancementLayersHevcConfig.
        //TODO: Please, delete the call to logEnhancementLayerHevcConfig and its Declaration.
        //TODO: ExtensionBlock.TYPE_mvcC Multiview Video Coding (MVC) is H.264/MPEG-4 AVC extension. It doesn't belong here!!
        break;
      default:
        Log.e("yusesope says","Something bad has happened!");
    }
  }
}
I leave it up to you to decide if the code is good or it isn't: feel free to change what you think is wrong (and maybe I end up learning something if you explain why).


The names of the variables are deliberately very long because I wanted everything to be as clear as possible.
I have not completed the implementation of "TYPE_mvcC" because it is an extension of H.264/MPEG-4 AVC and in my opinion it is a bit off-topic (we are interested in Dolby Vision!!! Who is still watching 3D movies?)


The various blocks are still analyzed in the "new" way.
In the ExtensionBlocksParser.java file I explain what to modify to activate the "old" way.


Everything should be easily expandable in the future: just simply declare any future blocks (TYPE_XXXX = 0xXXXXXXXX;) inside the ExtensionBlock.java file
This is great yusescope - just with a quick look stuff looks way better code wise (yay!)!

As soon as we get the specification fully reviewed and a few of us all confirmed that this code seems great ( all in regards to the "new way" needs to be removed and only the "old" way sticks ) we(you) should send this in as a pull request on exoplayer! Worst case they will give us comments on what to change!

In regards to mvcC blocks i don't think we have to worry too much. These blocks just needed to be used within AVC as well, where the mvcC block would be used - so in hevc, we should just leave it out and then another implementation can be made for AVC utilizing the same setup, just at the appropriate codec :) (We could choose just to add the block implementation for the h264 codec just to get the full implementation as the new standard is in regards to both AVC and HEVC playback. Else we might get a rejection and request to add anyway)

Good work i really think its already close to being able to send for review if all checks out (it looks like it could and the code is way cleaner :D)

shawnc22
Posts: 637
Joined: Tue Jan 21, 2020 7:40 am

Re: Dolby Vision and 1.15.1

#447 Post by shawnc22 » Thu May 21, 2020 3:52 pm

yusesope wrote:
Thu May 21, 2020 3:04 pm
shawnc22 wrote:
Tue May 19, 2020 6:54 pm
I will give this a try over the upcoming long weekend...
steffenmanden wrote:
Tue May 19, 2020 8:13 pm
ill try to give it a look this weekend - let us know if you do more!
I tried to clean up the code and make it more OOP.
You can download the new code HERE.


I have created three new classes:

Code: Select all

DataExtensionBlocks.java
ExtensionBlock.java
ExtensionBlocksParser.java
They must be copied to the folder

Code: Select all

ExoPlayer-release-v2\library\core\src\main\java\com\google\android\exoplayer2\extractor\mkv

Replace the following files again with those found in the archive.

Code: Select all

ExoPlayer-release-v2\library\core\src\main\java\com\google\android\exoplayer2\video\HevcConfig.java
ExoPlayer-release-v2\library\core\src\main\java\com\google\android\exoplayer2\extractor\mkv\MatroskaExtractor.java
ExoPlayer-release-v2\demos\main\src\main\AndroidManifest.xml

The whole logic is contained within the MatroskaExtractor.java file (always after "case CODEC_ID_H265:")

Code: Select all

DataExtensionBlocks dataExtensionBlocks = DataExtensionBlocks.analyze(
    new ParsableByteArray(codecPrivate),
    hevcConfig.csdEndPosition
);
if (dataExtensionBlocks.exist){
  List<ExtensionBlock> extensionBlocksList = ExtensionBlocksParser.parse(
      dataExtensionBlocks.content
  );
  for (ExtensionBlock extensionBlock: extensionBlocksList){
    switch (extensionBlock.getType()){
      case ExtensionBlock.TYPE_dvcC:
        DolbyVisionConfig dolbyVisionConfig = DolbyVisionConfig.parse(extensionBlock.getContent());
        if (dolbyVisionConfig != null) {
          codecs = dolbyVisionConfig.codecs;
          mimeType = MimeTypes.VIDEO_DOLBY_VISION;
        }
        break;
      case ExtensionBlock.TYPE_hvcE:
        HevcConfig enhancementLayersHevcConfig = HevcConfig.parse(extensionBlock.getContent());
        logEnhancementLayerHevcConfig(enhancementLayersHevcConfig.initializationData.get(0));
        //TODO: The thing now is to figure out how to implement enhancementLayersHevcConfig.
        //TODO: Please, delete the call to logEnhancementLayerHevcConfig and its Declaration.
        //TODO: ExtensionBlock.TYPE_mvcC Multiview Video Coding (MVC) is H.264/MPEG-4 AVC extension. It doesn't belong here!!
        break;
      default:
        Log.e("yusesope says","Something bad has happened!");
    }
  }
}
I leave it up to you to decide if the code is good or it isn't: feel free to change what you think is wrong (and maybe I end up learning something if you explain why).


The names of the variables are deliberately very long because I wanted everything to be as clear as possible.
I have not completed the implementation of "TYPE_mvcC" because it is an extension of H.264/MPEG-4 AVC and in my opinion it is a bit off-topic (we are interested in Dolby Vision!!! Who is still watching 3D movies?)


The various blocks are still analyzed in the "new" way.
In the ExtensionBlocksParser.java file I explain what to modify to activate the "old" way.


Everything should be easily expandable in the future: just simply declare any future blocks (TYPE_XXXX = 0xXXXXXXXX;) inside the ExtensionBlock.java file
great work as always! I will take a look and recompile once off work today

steffenmanden
Posts: 75
Joined: Sat Aug 31, 2019 8:49 pm

Re: Dolby Vision and 1.15.1

#448 Post by steffenmanden » Thu May 21, 2020 4:03 pm

steffenmanden wrote:
Thu May 21, 2020 3:32 pm
yusesope wrote:
Thu May 21, 2020 3:04 pm
shawnc22 wrote:
Tue May 19, 2020 6:54 pm
I will give this a try over the upcoming long weekend...
steffenmanden wrote:
Tue May 19, 2020 8:13 pm
ill try to give it a look this weekend - let us know if you do more!
I tried to clean up the code and make it more OOP.
You can download the new code HERE.


I have created three new classes:

Code: Select all

DataExtensionBlocks.java
ExtensionBlock.java
ExtensionBlocksParser.java
They must be copied to the folder

Code: Select all

ExoPlayer-release-v2\library\core\src\main\java\com\google\android\exoplayer2\extractor\mkv

Replace the following files again with those found in the archive.

Code: Select all

ExoPlayer-release-v2\library\core\src\main\java\com\google\android\exoplayer2\video\HevcConfig.java
ExoPlayer-release-v2\library\core\src\main\java\com\google\android\exoplayer2\extractor\mkv\MatroskaExtractor.java
ExoPlayer-release-v2\demos\main\src\main\AndroidManifest.xml

The whole logic is contained within the MatroskaExtractor.java file (always after "case CODEC_ID_H265:")

Code: Select all

DataExtensionBlocks dataExtensionBlocks = DataExtensionBlocks.analyze(
    new ParsableByteArray(codecPrivate),
    hevcConfig.csdEndPosition
);
if (dataExtensionBlocks.exist){
  List<ExtensionBlock> extensionBlocksList = ExtensionBlocksParser.parse(
      dataExtensionBlocks.content
  );
  for (ExtensionBlock extensionBlock: extensionBlocksList){
    switch (extensionBlock.getType()){
      case ExtensionBlock.TYPE_dvcC:
        DolbyVisionConfig dolbyVisionConfig = DolbyVisionConfig.parse(extensionBlock.getContent());
        if (dolbyVisionConfig != null) {
          codecs = dolbyVisionConfig.codecs;
          mimeType = MimeTypes.VIDEO_DOLBY_VISION;
        }
        break;
      case ExtensionBlock.TYPE_hvcE:
        HevcConfig enhancementLayersHevcConfig = HevcConfig.parse(extensionBlock.getContent());
        logEnhancementLayerHevcConfig(enhancementLayersHevcConfig.initializationData.get(0));
        //TODO: The thing now is to figure out how to implement enhancementLayersHevcConfig.
        //TODO: Please, delete the call to logEnhancementLayerHevcConfig and its Declaration.
        //TODO: ExtensionBlock.TYPE_mvcC Multiview Video Coding (MVC) is H.264/MPEG-4 AVC extension. It doesn't belong here!!
        break;
      default:
        Log.e("yusesope says","Something bad has happened!");
    }
  }
}
I leave it up to you to decide if the code is good or it isn't: feel free to change what you think is wrong (and maybe I end up learning something if you explain why).


The names of the variables are deliberately very long because I wanted everything to be as clear as possible.
I have not completed the implementation of "TYPE_mvcC" because it is an extension of H.264/MPEG-4 AVC and in my opinion it is a bit off-topic (we are interested in Dolby Vision!!! Who is still watching 3D movies?)


The various blocks are still analyzed in the "new" way.
In the ExtensionBlocksParser.java file I explain what to modify to activate the "old" way.


Everything should be easily expandable in the future: just simply declare any future blocks (TYPE_XXXX = 0xXXXXXXXX;) inside the ExtensionBlock.java file
This is great yusescope - just with a quick look stuff looks way better code wise (yay!)!

As soon as we get the specification fully reviewed and a few of us all confirmed that this code seems great ( all in regards to the "new way" needs to be removed and only the "old" way sticks ) we(you) should send this in as a pull request on exoplayer! Worst case they will give us comments on what to change!

In regards to mvcC blocks i don't think we have to worry too much. These blocks just needed to be used within AVC as well, where the mvcC block would be used - so in hevc, we should just leave it out and then another implementation can be made for AVC utilizing the same setup, just at the appropriate codec :) (We could choose just to add the block implementation for the h264 codec just to get the full implementation as the new standard is in regards to both AVC and HEVC playback. Else we might get a rejection and request to add anyway)

Good work i really think its already close to being able to send for review if all checks out (it looks like it could and the code is way cleaner :D)
Why dont you get it on github anyway ? :-) better for all of us to help!

Ill review the code tonight (Maybe throw it in github if you want, but you should get it in your own)

Ill see if i have the time to quickly add the h264 implementation for mvc :-)

shawnc22
Posts: 637
Joined: Tue Jan 21, 2020 7:40 am

Re: Dolby Vision and 1.15.1

#449 Post by shawnc22 » Thu May 21, 2020 4:36 pm

steffenmanden wrote:
Thu May 21, 2020 4:03 pm
Why dont you get it on github anyway ? :-) better for all of us to help!

Ill review the code tonight (Maybe throw it in github if you want, but you should get it in your own)

Ill see if i have the time to quickly add the h264 implementation for mvc :-)
Agreed with github! happy to do the compile/demo testing and review, but yusecope should get the ultimate pull-request credit from his repo :)

yusesope
Posts: 221
Joined: Sun Jul 28, 2019 3:34 am

Re: Dolby Vision and 1.15.1

#450 Post by yusesope » Thu May 21, 2020 5:59 pm

shawnc22 wrote:
Thu May 21, 2020 4:36 pm
Agreed with github! happy to do the compile/demo testing and review, but yusecope should get the ultimate pull-request credit from his repo :)
steffenmanden wrote:
Thu May 21, 2020 4:03 pm
Why dont you get it on github anyway ? :-)
Ok, Ok...I will make my first pull request on GitHub :D
Sunday I should have some free time.

But first we need to "find" an "old" mkv file with the blocks inside to configure DV.
Surely the ExoPlayer devs will want a test file.

I have temporarily implemented the "new" way to allow you to test everything.

I also wanted to try to edit the DolbyVisionConfig.java class and try to start the video stream with a different codec than the current one with the aim of using the hvcE block.

in short, there is still something to do.

Thank you both for the feedback and for reviewing the code.

Post Reply