#10857: Stream-level side data propagated to frames is indistinguishable from
frame-level side data
-------------------------------------+-------------------------------------
Reporter: dbuitenh | Type: defect
Status: new | Priority: important
Component: avcodec | Version: git-
Keywords: avcodec | master
sidedata | Blocked By:
Blocking: 7.0 | Reproduced by developer: 1
Analyzed by developer: 1 |
-------------------------------------+-------------------------------------
Summary of the bug:
Since ae22271620df90567ba276832b33607d64e9ba9c, stream level side data
gets propagated to frames.
This causes issues, for example, when both the container and bitstream
have the the same type of side data, such as, example, content light level
metadata.
The issues arises because once the stream/container level side data is
propagated to the frame, which already had side data of that type, the
frame now has two side data of that type attached to it, with no way of
figuring out which came from where.
This is made even worse due to the old av_frame_get_side_data API (which
is still supported), only being able to return the first of any given side
data attached to the frame.
After discussing with Anton and James, it was agreed that the solution is
to only attach one of each type of side data to a frame, and to prefer
frame-level/bitstream-level side data by default, if both exist, so that
the user can choose which they prefer to use (if the stream-level was
preferred by default, that would mean the default would be to not expose
frame-level at all, which would be Bad(TM). There shall be an API to allow
the user to prefer one or the other, which requires adding an AVList type
to the API, according to Anton's preferences.
This blocks 7.0 since it is a regression with no work around. Bug opened
per Michael's request.
How to reproduce:
Call av_frame_get_side_data() on frame(s) from the attached hdr10tags-
both.mkv.
You can also see it easy like this:
{{{
% ffprobe -show_frames -of json hdr10tags-both.mkv
[... snip ...]
"side_data_list": [
{
"side_data_type": "Mastering display metadata",
"red_x": "11408507/16777216",
"red_y": "5368709/16777216",
"green_x": "2222981/8388608",
"green_y": "11576279/16777216",
"blue_x": "5033165/33554432",
"blue_y": "16106127/268435456",
"white_point_x": "10492471/33554432",
"white_point_y": "689963/2097152",
"min_luminance": "5368709/536870912",
"max_luminance": "1000/1"
},
{
"side_data_type": "Content light level metadata",
"max_content": 1000,
"max_average": 300
},
{
"side_data_type": "H.26[45] User Data Unregistered SEI
message"
},
{
"side_data_type": "Mastering display metadata",
"red_x": "35400/50000",
"red_y": "14599/50000",
"green_x": "8500/50000",
"green_y": "39850/50000",
"blue_x": "6550/50000",
"blue_y": "2300/50000",
"white_point_x": "15634/50000",
"white_point_y": "16450/50000",
"min_luminance": "10/10000",
"max_luminance": "10000000/10000"
}
]
}}}
Note the multiple indistinguishable side data on the first frame.
--
Ticket URL: <https://trac.ffmpeg.org/ticket/10857>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
_______________________________________________
FFmpeg-trac mailing list
FFmpeg-trac@avcodec.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-trac
To unsubscribe, visit link above, or email
ffmpeg-trac-requ...@ffmpeg.org with subject "unsubscribe".