[FFmpeg-devel] [PATCH] DNxHD 10-bit support v5
Joseph Artsimovich
joseph at mirriad.com
Mon Jun 27 09:44:42 CEST 2011
Would someone look at my latest patch please?
On 14/06/2011 09:19, Joseph Artsimovich wrote:
> On 13/06/2011 22:40, Baptiste Coudurier wrote:
>>> As for the 10 bit vs 16 bit formats, let me give you my perspective.
>>> If I got that correctly, the comment in the header suggests storing
>>> [0..1023] samples in YUV422P16. I am not a fan of that idea. Is there
>>> currently even a way to tell libswscale how many bits are really being
>>> used? Also keep in mind that some applications (ours included) want to
>>> do their own colour conversion, and introducing this idea of "storage
>>> bits != logical bits" might require architectural changes.
>>> Another option is to use 10-bit planar formats. That sounds good in
>>> theory, but in practice it pushes the complexity out of ffmpeg, to
>>> libraries like libquicktime that uses ffmpeg internally, and also to
>>> applications that want to do their own colour conversion.
>>> The third option, which my patches use, is to scale 10 bit samples to
>>> the full 16bit range. This approach is my favorite and is the least
>>> painful overall.
>> Well, I understand, but using YUV422P10 is just faster, simpler and more
>> efficient. I'm against the code uselessly using YUV422P16.
>> Also converting from P16 to P10 for v210 output or vice versa would be
>> just waste of cpu.
> Faster, more efficient - maybe, but simpler? If I go that route, I
> will be adding support for converting to / from this format both to
> libquicktime (we use that instead of libavformat), and to our own
> application as well. Besides, I am not so sure additional operations
> on bits will be slower than rescaling.
>
>>> 2. The "full range dnxhd" turned out to be more than full range. I
>>> call
>>> it "overstretched range". That is, U and V values of 0 and 255 don't
>>> correspond to -0.5 and 0.5, instead they correspond to something like
>>> -0.488 and 0.488.
>> It seems weird to me that DNxHD and/or AVID would use a range that is
>> not referenced in SMPTE.
>> You seem to say the range is shorter ? It should be 4 - 1019 AFAIK.
> It's not shorter. It's full range for Y and "wider than full" range
> for U and V, so extreme U and V values are actually not representable
> in this format. I think the idea was: "they are not representable in
> RGB either, so why waste bits on them". From this point of view the
> "Rgb Levels" name makes sense, except that what Avid calls "Rgb
> Levels" is actually normal video range and what it calls "709 Levels"
> is this weird format.
>
>>> respect_user_specified_idct_algo.patch
>>>
>>>
>>> diff --git a/libavcodec/dnxhddec.c b/libavcodec/dnxhddec.c
>>> index d995222..a06b6d3 100644
>>> --- a/libavcodec/dnxhddec.c
>>> +++ b/libavcodec/dnxhddec.c
>>> @@ -48,6 +48,7 @@ typedef struct DNXHDContext {
>>> ScanTable scantable;
>>> const CIDEntry *cid_table;
>>> int initialized_for_bits; // 8, 10 or 0 if not initialized at
>>> all.
>>> + int dnx8bit_idct_algo;
>> Named it 'idct_algo' and merge this patch into the previous one
>> otherwise there is gonna be useless break in the tree.
>>
> Actually it's named dnx8bit_idct_algo on purpose, as the 10-bit code
> never looks at it and never modifies it.
> Well, no big deal anyway. I merged this patch into the previous one,
> and made two versions of it, one with my naming, another with yours.
> Pick any.
>
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
--
Joseph Artsimovich
Software Developer
MirriAd Ltd
More information about the ffmpeg-devel
mailing list