[FFmpeg-devel] [PATCH 1/5] mlpenc: fix lossless check error in number_sbits

2020-01-24 Thread Jai Luthra
we need two bits instead of one bit to represent -1 in bitstream

Signed-off-by: Jai Luthra 
---
 libavcodec/mlpenc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libavcodec/mlpenc.c b/libavcodec/mlpenc.c
index deb171645c..f4948451f1 100644
--- a/libavcodec/mlpenc.c
+++ b/libavcodec/mlpenc.c
@@ -466,7 +466,7 @@ static void default_decoding_params(MLPEncodeContext *ctx,
  */
 static int inline number_sbits(int number)
 {
-if (number < 0)
+if (number < -1)
 number++;
 
 return av_log2(FFABS(number)) + 1 + !!number;
-- 
2.25.0

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Re: [FFmpeg-devel] [PATCH 1/5] mlpenc: fix lossless check error in number_sbits

2019-07-09 Thread Jai Luthra

On Wed, Jul 10, 2019 at 12:14:56AM +0200, Lynne wrote:

Jul 9, 2019, 9:18 PM by m...@jailuthra.in:


we need two bits instead of one bit to represent -1 in bitstream

Signed-off-by: Jai Luthra 
---
 libavcodec/mlpenc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libavcodec/mlpenc.c b/libavcodec/mlpenc.c
index deb171645c..f4948451f1 100644
--- a/libavcodec/mlpenc.c
+++ b/libavcodec/mlpenc.c
@@ -466,7 +466,7 @@ static void default_decoding_params(MLPEncodeContext *ctx,
 */
 static int inline number_sbits(int number)
 {
-if (number < 0)
+if (number < -1)
 number++;



This is different from the first patch's version. Sure its correct now?


Yep. Previous patch produced valid bitstream too, but this provides better 
compression [1] by representing numbers of the form -2^x with one less bit for 
x >= 1.


This makes more sense, as we can represent -2 in two-bit twos-complement 
notation as `10` so output should be 2 bits (instead of 3 by previous patch). 
(similarly for -4, -8, -16, ...)


The lossless errors were being caused when a block of samples were all either 
-1 or 0. This function implied all samples could be represented as single bit 
each, but down the pipeline after huff vlc calculations, the encoder pushed 
 on the bitstream for all samples, which was always interpreted as 0 
by the decoder and never -1.


NB: One can argue -1 and 0 in fact can be represented in a single bit as two's 
complement, 0 being `0` and -1 being `1`. But imho, single bit two's 
complement is a weird boundary case, and not considering it solves the issue 
here. If someone has a better idea pls suggest.


[1]: tested using both patches on 
https://samples.ffmpeg.org/flac/When%20I%20Grow%20Up.flac. Previous patch 
compressed it to 28788216 byte MLP stream, this one compresses it to 28787834 
byte MLP stream. Both streams are valid and decode to lossless bit-exact 
output.


thx

--
jlut
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Re: [FFmpeg-devel] [PATCH 1/5] mlpenc: fix lossless check error in number_sbits

2019-07-09 Thread Lynne
Jul 9, 2019, 9:18 PM by m...@jailuthra.in:

> we need two bits instead of one bit to represent -1 in bitstream
>
> Signed-off-by: Jai Luthra 
> ---
>  libavcodec/mlpenc.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/libavcodec/mlpenc.c b/libavcodec/mlpenc.c
> index deb171645c..f4948451f1 100644
> --- a/libavcodec/mlpenc.c
> +++ b/libavcodec/mlpenc.c
> @@ -466,7 +466,7 @@ static void default_decoding_params(MLPEncodeContext *ctx,
>  */
>  static int inline number_sbits(int number)
>  {
> -if (number < 0)
> +if (number < -1)
>  number++; 
>

This is different from the first patch's version. Sure its correct now?
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

[FFmpeg-devel] [PATCH 1/5] mlpenc: fix lossless check error in number_sbits

2019-07-09 Thread Jai Luthra
we need two bits instead of one bit to represent -1 in bitstream

Signed-off-by: Jai Luthra 
---
 libavcodec/mlpenc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libavcodec/mlpenc.c b/libavcodec/mlpenc.c
index deb171645c..f4948451f1 100644
--- a/libavcodec/mlpenc.c
+++ b/libavcodec/mlpenc.c
@@ -466,7 +466,7 @@ static void default_decoding_params(MLPEncodeContext *ctx,
  */
 static int inline number_sbits(int number)
 {
-if (number < 0)
+if (number < -1)
 number++;
 
 return av_log2(FFABS(number)) + 1 + !!number;
-- 
2.22.0

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".