diff mbox series

[FFmpeg-devel,1/3] avcodec/dxtory: unbreak decoding after 6e1a167c556

Message ID 20200904101706.24228-1-onemda@gmail.com
State New
Headers show
Series [FFmpeg-devel,1/3] avcodec/dxtory: unbreak decoding after 6e1a167c556
Related show

Checks

Context Check Description
andriy/default pending
andriy/make success Make finished
andriy/make_fate success Make fate finished

Commit Message

Paul B Mahol Sept. 4, 2020, 10:17 a.m. UTC
get_unary() takes at minimum only 1 bit.

Signed-off-by: Paul B Mahol <onemda@gmail.com>
---
 libavcodec/dxtory.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

Comments

Michael Niedermayer Sept. 4, 2020, 7:34 p.m. UTC | #1
On Fri, Sep 04, 2020 at 12:17:04PM +0200, Paul B Mahol wrote:
> get_unary() takes at minimum only 1 bit.
> 
> Signed-off-by: Paul B Mahol <onemda@gmail.com>
> ---
>  libavcodec/dxtory.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)

should be ok

thanks

[...]
Paul B Mahol Sept. 4, 2020, 8:03 p.m. UTC | #2
On 9/4/20, Michael Niedermayer <michael@niedermayer.cc> wrote:
> On Fri, Sep 04, 2020 at 12:17:04PM +0200, Paul B Mahol wrote:
>> get_unary() takes at minimum only 1 bit.
>>
>> Signed-off-by: Paul B Mahol <onemda@gmail.com>
>> ---
>>  libavcodec/dxtory.c | 10 +++++-----
>>  1 file changed, 5 insertions(+), 5 deletions(-)
>
> should be ok

There is more correct approach in latest version of set in 2nd patch.
(It calculates bits more completely for 420 and 410 case)
I probably should merge 1st and 2nd patch of that set. What do you think?

>
> thanks
>
> [...]
> --
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> When the tyrant has disposed of foreign enemies by conquest or treaty, and
> there is nothing more to fear from them, then he is always stirring up
> some war or other, in order that the people may require a leader. -- Plato
>
Michael Niedermayer Sept. 4, 2020, 9:52 p.m. UTC | #3
On Fri, Sep 04, 2020 at 10:03:26PM +0200, Paul B Mahol wrote:
> On 9/4/20, Michael Niedermayer <michael@niedermayer.cc> wrote:
> > On Fri, Sep 04, 2020 at 12:17:04PM +0200, Paul B Mahol wrote:
> >> get_unary() takes at minimum only 1 bit.
> >>
> >> Signed-off-by: Paul B Mahol <onemda@gmail.com>
> >> ---
> >>  libavcodec/dxtory.c | 10 +++++-----
> >>  1 file changed, 5 insertions(+), 5 deletions(-)
> >
> > should be ok
> 
> There is more correct approach in latest version of set in 2nd patch.
> (It calculates bits more completely for 420 and 410 case)
> I probably should merge 1st and 2nd patch of that set. What do you think?

do what you prefer

thx

[...]
diff mbox series

Patch

diff --git a/libavcodec/dxtory.c b/libavcodec/dxtory.c
index bc19f27951..3cd95afe80 100644
--- a/libavcodec/dxtory.c
+++ b/libavcodec/dxtory.c
@@ -395,7 +395,7 @@  static int dx2_decode_slice_5x5(GetBitContext *gb, AVFrame *frame,
     int stride   = frame->linesize[0];
     uint8_t *dst = frame->data[0] + stride * line;
 
-    for (y = 0; y < left && get_bits_left(gb) > 6 * width; y++) {
+    for (y = 0; y < left && get_bits_left(gb) >= 3 * width; y++) {
         for (x = 0; x < width; x++) {
             b = decode_sym_565(gb, lru[0], 5);
             g = decode_sym_565(gb, lru[1], is_565 ? 6 : 5);
@@ -462,7 +462,7 @@  static int dx2_decode_slice_rgb(GetBitContext *gb, AVFrame *frame,
     int stride   = frame->linesize[0];
     uint8_t *dst = frame->data[0] + stride * line;
 
-    for (y = 0; y < left && get_bits_left(gb) > 6 * width; y++) {
+    for (y = 0; y < left && get_bits_left(gb) >= 3 * width; y++) {
         for (x = 0; x < width; x++) {
             dst[x * 3 + 0] = decode_sym(gb, lru[0]);
             dst[x * 3 + 1] = decode_sym(gb, lru[1]);
@@ -508,7 +508,7 @@  static int dx2_decode_slice_410(GetBitContext *gb, AVFrame *frame,
     uint8_t *U  = frame->data[1] + (ustride >> 2) * line;
     uint8_t *V  = frame->data[2] + (vstride >> 2) * line;
 
-    for (y = 0; y < left - 3 && get_bits_left(gb) > 9 * width; y += 4) {
+    for (y = 0; y < left - 3 && get_bits_left(gb) >= 4 * width; y += 4) {
         for (x = 0; x < width; x += 4) {
             for (j = 0; j < 4; j++)
                 for (i = 0; i < 4; i++)
@@ -553,7 +553,7 @@  static int dx2_decode_slice_420(GetBitContext *gb, AVFrame *frame,
     uint8_t *V  = frame->data[2] + (vstride >> 1) * line;
 
 
-    for (y = 0; y < left - 1 && get_bits_left(gb) > 6 * width; y += 2) {
+    for (y = 0; y < left - 1 && get_bits_left(gb) >= 3 * width; y += 2) {
         for (x = 0; x < width; x += 2) {
             Y[x + 0 + 0 * ystride] = decode_sym(gb, lru[0]);
             Y[x + 1 + 0 * ystride] = decode_sym(gb, lru[0]);
@@ -597,7 +597,7 @@  static int dx2_decode_slice_444(GetBitContext *gb, AVFrame *frame,
     uint8_t *U  = frame->data[1] + ustride * line;
     uint8_t *V  = frame->data[2] + vstride * line;
 
-    for (y = 0; y < left && get_bits_left(gb) > 6 * width; y++) {
+    for (y = 0; y < left && get_bits_left(gb) >= 3 * width; y++) {
         for (x = 0; x < width; x++) {
             Y[x] = decode_sym(gb, lru[0]);
             U[x] = decode_sym(gb, lru[1]) ^ 0x80;