mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-19 18:24:14 +08:00
media: vicodec: improve handling of uncompressable planes
Exit the loop immediately once it is clear that the plane cannot be compressed. Also clear the PCODED bit and fix the PCODED check (it should check for the bit) in the caller code. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
This commit is contained in:
parent
98efd5525a
commit
abe9d19ae3
@ -685,9 +685,6 @@ static u32 encode_plane(u8 *input, u8 *refp, __be16 **rlco, __be16 *rlco_max,
|
||||
input += 8 * input_step;
|
||||
refp += 8 * 8;
|
||||
|
||||
if (encoding & FRAME_UNENCODED)
|
||||
continue;
|
||||
|
||||
size = rlc(cf->coeffs, *rlco, blocktype);
|
||||
if (last_size == size &&
|
||||
!memcmp(*rlco + 1, *rlco - size + 1, 2 * size - 2)) {
|
||||
@ -702,12 +699,16 @@ static u32 encode_plane(u8 *input, u8 *refp, __be16 **rlco, __be16 *rlco_max,
|
||||
} else {
|
||||
*rlco += size;
|
||||
}
|
||||
if (*rlco >= rlco_max)
|
||||
if (*rlco >= rlco_max) {
|
||||
encoding |= FRAME_UNENCODED;
|
||||
goto exit_loop;
|
||||
}
|
||||
last_size = size;
|
||||
}
|
||||
input += width * 7 * input_step;
|
||||
}
|
||||
|
||||
exit_loop:
|
||||
if (encoding & FRAME_UNENCODED) {
|
||||
u8 *out = (u8 *)rlco_start;
|
||||
|
||||
@ -721,6 +722,7 @@ static u32 encode_plane(u8 *input, u8 *refp, __be16 **rlco, __be16 *rlco_max,
|
||||
for (i = 0; i < height * width; i++, input += input_step)
|
||||
*out++ = (*input == 0xff) ? 0xfe : *input;
|
||||
*rlco = (__be16 *)out;
|
||||
encoding &= ~FRAME_PCODED;
|
||||
}
|
||||
return encoding;
|
||||
}
|
||||
|
@ -281,7 +281,7 @@ static void encode(struct vicodec_ctx *ctx,
|
||||
|
||||
encoding = encode_frame(&rf, &ctx->ref_frame, &cf, !ctx->gop_cnt,
|
||||
ctx->gop_cnt == ctx->gop_size - 1);
|
||||
if (encoding != FRAME_PCODED)
|
||||
if (!(encoding & FRAME_PCODED))
|
||||
ctx->gop_cnt = 0;
|
||||
if (++ctx->gop_cnt >= ctx->gop_size)
|
||||
ctx->gop_cnt = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user