Welcome to Doom9's Forum, THE in-place to be for everyone interested in DVD conversion. Before you start posting please read the forum rules. By posting to this forum you agree to abide by the rules. |
![]() |
#21 | Link |
Registered User
Join Date: Dec 2011
Posts: 354
|
I'm not a video professional, or not even amateur video fan. I'm just a guy who do some rips.
I'm not knowledgeable about video stuffs like you guys. But I just wanted to say this. About this arguments, being mathematically lossless really matters in real life practice? For example this video https://www.youtube.com/watch?v=kIq5CZlg8Rg Yeah, example itself in this video is bullshit. But this is the what we call simplify or "precision" right? (Simplifying and precision is different things in math world, I know. But still you got a point.) In real life, physicists do math by simplifying, to get close enough if not exact value and to save a time (or you could just say it "not to waste your precious time on not really worth calculate stuffs"). Video engineering or computer engineering is "physics thing" right? Yeah if there are methods to calculate exact value, that is a good thing. But I ask again, on this thread and real life practice videos, is that really matters? Last edited by bxyhxyh; 5th October 2015 at 08:50. Reason: typo |
![]() |
![]() |
![]() |
#23 | Link | |
Registered User
Join Date: Mar 2006
Posts: 1,054
|
Quote:
Why those signals are common in YCbCr world? - they are used to measure video circuits. |
|
![]() |
![]() |
![]() |
#24 | Link |
I'm Siri
Join Date: Oct 2012
Location: void
Posts: 2,633
|
and ycbcr actually acts more appropriately as a YUV colorspace, it separates luminance and chrominance precisely but it's just not lossless (under finite precision)
ycgco is just lossless for lossless, like it's just designed to be lossless, not separating luminance and chrominance precisely like ycbcr |
![]() |
![]() |
![]() |
#25 | Link | |
Registered User
Join Date: Dec 2011
Posts: 354
|
Quote:
You guys are defining "lossless" in your own ways. Yours is of course true. But Vivan's is also true. I maybe got wrong. Correct me if I'm wrong. I got this from Vivan's statements. Think that original value was 0.123. It have changed to 0.123456 with some algorithm. But If machine only display 4 digit value, then 0.123456 is equal to 0.123. First value 0.123 and last one also 0.123. Lossless! Similar for ycgco. It is Vivan's point right? Then I agree this. Last edited by bxyhxyh; 5th October 2015 at 10:44. |
|
![]() |
![]() |
![]() |
#27 | Link | |
/人 ◕ ‿‿ ◕ 人\
Join Date: May 2011
Location: Russia
Posts: 643
|
Quote:
But we're talking about RGB->YCbCr->RGB transform, not YCbCr->RGB->YCbCr. RGB fits into YCbCr completely, meaning that there's correspondence for every possible value. YCbCr does not. |
|
![]() |
![]() |
![]() |
#28 | Link | |
I'm Siri
Join Date: Oct 2012
Location: void
Posts: 2,633
|
Quote:
like: YCgCo is lossless (it has no lsb) YCbCr (infinite precision) is lossless (it has no lsb, infinite precision is free from any sort of rounding/truncating) YCbCr (finite precision) is lossy (it does have lsb/errors, and lossy without further/the final rounding) |
|
![]() |
![]() |
![]() |
#29 | Link |
ангел смерти
![]() Join Date: Nov 2004
Location: Lost
Posts: 9,555
|
So far we a have a whole thread of people pedantically arguing about terminology and no one even trying to help with sephirotic's problem, which is that YV24 is being subsampled to YV12 and then resampled back to YV24 at some point along the chain, and has nothing to do with true or perceptually lossless at all. Could you guys TRY to stay even remotely on topic, or start a new thread debating your perception of terms?
|
![]() |
![]() |
![]() |
#30 | Link | ||
/人 ◕ ‿‿ ◕ 人\
Join Date: May 2011
Location: Russia
Posts: 643
|
Quote:
Quote:
His problem was a wrong colormatrix. He thought that difference he is seeing is due to subsampling, but it was not the case. And it was solved by using avisynth's convert function. |
||
![]() |
![]() |
![]() |
#31 | Link |
I'm Siri
Join Date: Oct 2012
Location: void
Posts: 2,633
|
suppose:
1. the precision of the input signal (a discrete function f (x)), is a constant value "p0" 2. define "round (f (x), px)" as rounding the values from the discrete function f (x) to precision "px" 3. define "new_higher_precision (f (x), px)" as increasing the precision of the values from f (x) to "px" by adding zeros as the LSB 4. the actual processing part is called g (x), and it works at the precision "p1" (p1 > p0) 5. the reverse process of g (x) is called h (x), and it works at precision "p1" as well if: h (g (new_higher_precision (f (x), p1))) = f (x) call it lossless else: lossy, even if round (h (g (new_higher_precision (f (x), p1))), p0) = f (x) Last edited by feisty2; 5th October 2015 at 12:16. |
![]() |
![]() |
![]() |
#32 | Link |
Registered User
Join Date: Nov 2014
Posts: 440
|
I admit that at one point I had trouble to understand.
From the mathematical point of view all conversions YUV <---> RGB (and many others) are reversible. The only problem is implementation. The computer has a finite precision, thus it introduces errors. The only thing you can do is to make this error negligible as possible. In programs of mathematical calculation all the floating-point numbers are are converted into fractions if possible. If not, like Pi, are replaced with special symbols and converted into a numbers only at the end and only if required. No management program video has similar capabilities. The human eye has a finite precision, so implement RGB or YUV as six plans of double (384-bit for pixel) it's useless.
__________________
github.com |
![]() |
![]() |
![]() |
#33 | Link | |
I'm Siri
Join Date: Oct 2012
Location: void
Posts: 2,633
|
Quote:
how come stuff like fractions, pi, e.. were never supported at the hardware level thru all these years, they are just typical and super common stuff used like, everyday |
|
![]() |
![]() |
![]() |
#34 | Link |
Registered User
Join Date: Nov 2014
Posts: 440
|
Example, Pink colour sRGB(255, 203, 219).
In unsigned-normalized is (255 / 255, 203 / 255, 219 / 255). Convert to Y'PbPr (ITU-R BT.601). Take only Y' for this example. Kr = 0.299 = 299 / 1000; Kg = 1 - 0.114 - 0.299 = 0.587 = 587 / 1000; Kb = 0.114 = 144 / 1000; Y' = Kr * R + Kg * G + Kb * B = = (299 / 1000) * (255 / 255) + (587 / 1000) * (203 / 255) + (144 / 1000) * (219 / 255) = = (299 / 1000) + (119161 / 255000) + (1314 / 10625) = = 113471 / 127500 In unsigned-int8 is 226.942 --> 226 ERROR! In unsigned-int9 is 454.773968627451 --> 454 ERROR! In unsigned-int10 is 910.4379058823529 --> 910 ERROR! In unsigned-int16 is 58324.094 -> 58324 ERROR! In unsigned-int24 is 14931195.006 --> 14931195 ERROR! In unsigned-int32 is 3822386148.478 --> 3822386148 ERROR! The only real thing that changes is the level of accuracy.
__________________
github.com |
![]() |
![]() |
![]() |
#36 | Link | |
Registered User
Join Date: Nov 2014
Posts: 440
|
Quote:
Before you simplify everything as much as possible then calculate the result. In any case exist quadruple-precision floating-point format (128-bits) for those who need a lot of precision.
__________________
github.com |
|
![]() |
![]() |
![]() |
#37 | Link |
I'm Siri
Join Date: Oct 2012
Location: void
Posts: 2,633
|
I think fractions should really be added as a basic data type like floats, like, a 32bits unsigned fraction would have 16bits as the numerator and other 16bits as the denominator and it would own its own "+ - * /"... just like floats
|
![]() |
![]() |
![]() |
#38 | Link | |||
/人 ◕ ‿‿ ◕ 人\
Join Date: May 2011
Location: Russia
Posts: 643
|
First,
Quote:
Second, left and right parts of your comparison have different precision. They are different. You have to match precision and adding false precision in hopes that another part has same false precision is obviously not correct. Third, make rounding part of the transform and any transform will be lossless by your own definition. Look at my YCbCrToRGB as an example. It even rounds without using "round" function. Do you know what YCgCo was created for? To be lossless for RGB->YCgCo conversion while using as few bits as possible. Fewer being 2, 1 for each chroma channels. Quote:
Guess what you'll need to do if you want to use YCgCo for what it was designed for. Quote:
If you perform calculations with precision higher* than the precision of your data - then you're not losing any data. There's no point in calculating 10 + 20 with 256-bit precision just because you can if you're not even sure if first number is actually 10 or 7 or 13. *That precision could be calculated, and this is the one of the first things you do when you start doing physics lab in school (when you're starting to apply math to the real world). That stuff is actually hard, so it's not surprising that no one bothers with it. Just throw more precision, and hope that it helps. Yes, I'm sure that we're discussing RGB --> YCbCr --> RGB and not YCbCr <--> RGB because there's nothing to discuss about the latter - you said it all. Last edited by vivan; 5th October 2015 at 14:56. |
|||
![]() |
![]() |
![]() |
#39 | Link | |||
I'm Siri
Join Date: Oct 2012
Location: void
Posts: 2,633
|
Quote:
Quote:
Quote:
you can't round it to a lower precision if "it works at precision 'p1' " and in case you gonna troll around "precision" again like your first and second question lemme do a little correction here if: h (g (new_higher_precision (f (x), p1))) = new_higher_precision (f (x), p1) call it lossless Last edited by feisty2; 5th October 2015 at 15:22. |
|||
![]() |
![]() |
![]() |
#40 | Link | |
Registered User
Join Date: Dec 2011
Posts: 354
|
Quote:
EDIT: One thing I can't understand is that what's the point of debating on two things that does exactly same thing? Last edited by bxyhxyh; 5th October 2015 at 16:48. |
|
![]() |
![]() |
![]() |
Tags |
444, avisynth, color subsampling, x264, yv24 |
Thread Tools | Search this Thread |
Display Modes | |
|
|