Skip to content

Draft: RichMediaInstance: add Asset field

Michal Vlasák requested to merge mvlasak/poppler:asset into master

After seeing Okular's handling of (Flash) Rich Media (https://invent.kde.org/graphics/okular/-/blob/master/generators/poppler/generator_pdf.cpp#L244-335), I thought it wouldn't be hard to add support of plain Rich Media, e.g.: (read objects from bottom)

2 0 obj
<<
  /Type /Filespec
  /F (video.mp4)
  /Desc (video.mp4)
  /EF <<
    /F 1 0 R
  >>
>>
endobj

3 0 obj
<<
  /Type /RichMediaInstance
  /Subtype /Video
  /Asset 2 0 R
>>
endobj

4 0 obj
<<
  /Type /RichMediaConfiguration
  /Subtype /Video
  /Instances [ 3 0 R ]
>>
endobj

8 0 obj
<<
  /Type /Annot
  /Subtype /RichMedia
  /RichMediaSettings <<
    /Activation <<
      /Condition /PV
    >>
    /Deactivation <<
      /Condition /XD
    >>
  >>
  /RichMediaContent <<
    /Assets <<
      /Names [ (video.mp4) 2 0 R ]
    >>
    /Configurations [ 4 0 R ]
  >>
  /AP <<
    /N 5 0 R
  >>
  /Border [ 0 0 0 ]
  /NM (video.mp4)
  /Contents (rm 'video.mp4')
  /Rect [ 70.866 317.48 524.409 771.024 ]
>>
endobj

Poppler however, currently doesn't expose the /Asset field of RichMediaInstance. The /Asset should be also contained in the /Assets array. I know nothing about handling of object / indirect references in poppler, so my first naive attempt was to keep it simple and not share it. Also maybe some fields from /Presentation dictionary (nested in /Activation) will be useful, but I need to confirm this.

I tried to adapt Okular with these changes applied, but no luck so far -- maybe I didn't manage to use the custom compiled library, or the code is flawed.

If this code is unusable and somebody has an easy way to do it please do. If not I will try to get this done (for possible use in Okular and Evince), but maybe no sooner than at end of July.

Complete demo file is attached: simple.pdf

Merge request reports