Menu

#118 Subtitle Content is undefined on all subtitles

v1.0_(example)
open
nobody
None
5
2015-03-02
2015-03-02
Pete
No

I believe the wrong field is being used for the subtitle "Content". Here's an example for a dvd with 9 subtitle streams:

$ shrip list --device=dvd/VIDEO_TS --title=1 --subtitles
Title: 01, Length: 02:11:55, Chapters: 16, Audio streams: 05, Subpictures: 09
    Subtitle: 01, Language: en, Content: Undefined
    Subtitle: 02, Language: en, Content: Undefined
    Subtitle: 03, Language: zh, Content: Undefined
    Subtitle: 04, Language: zh, Content: Undefined
    Subtitle: 05, Language: fr, Content: Undefined
    Subtitle: 06, Language: ko, Content: Undefined
    Subtitle: 07, Language: es, Content: Undefined
    Subtitle: 08, Language: th, Content: Undefined
    Subtitle: 09, Language: fr, Content: Undefined

Notice the "Content" field is Undefined for all streams.

For comparison, here's similar output using lsdvd:

$ lsdvd -qst1 dvd/VIDEO_TS
Title: 01, Length: 02:11:55.066 Chapters: 16, Cells: 17, Audio streams: 05, Subpictures: 09
    Subtitle: 01, Language: en - English, Content: Normal, Stream id: 0x20,
    Subtitle: 02, Language: en - English, Content: Normal_CC, Stream id: 0x21,
    Subtitle: 03, Language: zh - Chinese, Content: Normal, Stream id: 0x22,
    Subtitle: 04, Language: zh - Chinese, Content: Normal, Stream id: 0x23,
    Subtitle: 05, Language: fr - Francais, Content: Normal, Stream id: 0x24,
    Subtitle: 06, Language: ko - Korean, Content: Normal, Stream id: 0x25,
    Subtitle: 07, Language: es - Espanol, Content: Normal, Stream id: 0x26,
    Subtitle: 08, Language: th - Thai, Content: Normal, Stream id: 0x27,
    Subtitle: 09, Language: fr - Francais, Content: Undefined, Stream id: 0x28,

Notice all subtitles (except 9) contain some kind of "Content".

After poking around in the code for a bit I found ogmdvd-disc.c (line 341 - version 1.0.1) is using the "lang_extension" attribute and I think it should be using the "code_extension" attribute. I think that for 3 reason;

  1. that's what's used for the audio streams (line 320)
  2. that's what lsdvd uses
  3. (most importantly) code_extension actually works. At least on the dvd's I checked. :-)

After a little code change, here's what I see:

$ LD_LIBRARY_PATH=ogmrip-1.0.1-subp/libogmdvd/.libs shrip list --device=dvd/VIDEO_TS --title=1 --subtitles
Title: 01, Length: 02:11:55, Chapters: 16, Audio streams: 05, Subpictures: 09
    Subtitle: 01, Language: en, Content: Normal
    Subtitle: 02, Language: en, Content: Normal_CC
    Subtitle: 03, Language: zh, Content: Normal
    Subtitle: 04, Language: zh, Content: Normal
    Subtitle: 05, Language: fr, Content: Normal
    Subtitle: 06, Language: ko, Content: Normal
    Subtitle: 07, Language: es, Content: Normal
    Subtitle: 08, Language: th, Content: Normal
    Subtitle: 09, Language: fr, Content: Undefined

I haven't done much research on the difference between lang_extension and code_extension, so I don't know if that's always the case. I did check about a dozen dvds I have and in all cases when there was some kind of content, the modified version of ogmdvd-disc.c, displayed the same information as lsdvd, whereas the unmodified version ALWAYS showed "undefined".

Here's a couple links to some dvd info that might be useful in determining if one or the other should be used:

And looking in the libdvdread source (src/dvdread/ifo_types.h) I found this comment:

   /*
    * type: 0 not specified
    *       1 language
    *       2 other
    * coding mode: 0 run length
    *              1 extended
    *              2 other
    * language: indicates language if type == 1
    * lang extension: if type == 1 contains the lang extension
    */

I don't know exactly what that means, but thought it MIGHT mean "lang_extension" should be used if type == 1 and code_extension should be used otherwise. But that's just a wild guess.

If the simple solution (just use code_extension) is the way to go, then the attached patch (subp.patch) should do the trick. It changes lang_extension to code_extension in the following 3 files:

  • libogmdvd/ogmdvd-disc.c
  • libogmdvd/ogmdvd-priv.h
  • libogmdvd/ogmdvd-subp.c
1 Attachments

Discussion


Log in to post a comment.