mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-06 17:46:50 +08:00
fix[mpp_dump]: add YUV420SP_10BIT format dump
Change-Id: I1e89dbfefb394b4e8b2fbaf4fb0516be3528dd24 Signed-off-by: Yanjun Liao <yanjun.liao@rock-chips.com>
This commit is contained in:
@@ -150,6 +150,21 @@ static RK_U8 fetch_data(RK_U32 fmt, RK_U8 *line, RK_U32 num)
|
|||||||
return RK_U8(value);
|
return RK_U8(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void rearrange_pix(RK_U8 *tmp_line, RK_U8 *base, RK_U32 n)
|
||||||
|
{
|
||||||
|
RK_U16 * pix = (RK_U16 *)(tmp_line + n * 16);
|
||||||
|
RK_U16 * base_u16 = (RK_U16 *)(base + n * 10);
|
||||||
|
|
||||||
|
pix[0] = base_u16[0] & 0x03FF;
|
||||||
|
pix[1] = (base_u16[0] & 0xFC00) >> 10 | (base_u16[1] & 0x000F) << 6;
|
||||||
|
pix[2] = (base_u16[1] & 0x3FF0) >> 4;
|
||||||
|
pix[3] = (base_u16[1] & 0xC000) >> 14 | (base_u16[2] & 0x00FF) << 2;
|
||||||
|
pix[4] = (base_u16[2] & 0xFF00) >> 8 | (base_u16[3] & 0x0003) << 8;
|
||||||
|
pix[5] = (base_u16[3] & 0x0FFC) >> 2;
|
||||||
|
pix[6] = (base_u16[3] & 0xF000) >> 12 | (base_u16[4] & 0x003F) << 4;
|
||||||
|
pix[7] = (base_u16[4] & 0xFFC0) >> 6;
|
||||||
|
}
|
||||||
|
|
||||||
static void dump_frame(FILE *fp, MppFrame frame, RK_U8 *tmp, RK_U32 w, RK_U32 h)
|
static void dump_frame(FILE *fp, MppFrame frame, RK_U8 *tmp, RK_U32 w, RK_U32 h)
|
||||||
{
|
{
|
||||||
RK_U32 i = 0, j = 0;
|
RK_U32 i = 0, j = 0;
|
||||||
@@ -221,12 +236,36 @@ static void dump_frame(FILE *fp, MppFrame frame, RK_U8 *tmp, RK_U32 w, RK_U32 h)
|
|||||||
case MPP_FMT_YUV444SP : {
|
case MPP_FMT_YUV444SP : {
|
||||||
size = hor_stride * ver_stride * 3;
|
size = hor_stride * ver_stride * 3;
|
||||||
} break;
|
} break;
|
||||||
|
case MPP_FMT_YUV420SP_10BIT : {
|
||||||
|
RK_U8 *base_y = p_buf;
|
||||||
|
RK_U8 *base_c = p_buf + hor_stride * ver_stride;
|
||||||
|
RK_U8 *tmp_line = (RK_U8 *)mpp_malloc(RK_U16, width);
|
||||||
|
|
||||||
|
if (!tmp_line) {
|
||||||
|
mpp_log("tmp_line malloc fail");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < height; i++, base_y += hor_stride) {
|
||||||
|
for (j = 0; j < MPP_ALIGN(width, 8) / 8; j++)
|
||||||
|
rearrange_pix(tmp_line, base_y, j);
|
||||||
|
fwrite(tmp_line, width * sizeof(RK_U16), 1, fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < height / 2; i++, base_c += hor_stride) {
|
||||||
|
for (j = 0; j < MPP_ALIGN(width, 8) / 8; j++)
|
||||||
|
rearrange_pix(tmp_line, base_c, j);
|
||||||
|
fwrite(tmp_line, width * sizeof(RK_U16), 1, fp);
|
||||||
|
}
|
||||||
|
MPP_FREE(tmp_line);
|
||||||
|
}
|
||||||
default : break;
|
default : break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mpp_log("dump_yuv: w:h [%d:%d] stride [%d:%d] pts %lld\n",
|
mpp_log("dump_yuv: w:h [%d:%d] stride [%d:%d] pts %lld\n",
|
||||||
width, height, hor_stride, ver_stride, mpp_frame_get_pts(frame));
|
width, height, hor_stride, ver_stride, mpp_frame_get_pts(frame));
|
||||||
fwrite(tmp, 1, size, fp);
|
if (size)
|
||||||
|
fwrite(tmp, 1, size, fp);
|
||||||
fflush(fp);
|
fflush(fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -44,6 +44,21 @@ void _show_options(int count, OptionInfo *options)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void rearrange_pix(RK_U8 *tmp_line, RK_U8 *base, RK_U32 n)
|
||||||
|
{
|
||||||
|
RK_U16 * pix = (RK_U16 *)(tmp_line + n * 16);
|
||||||
|
RK_U16 * base_u16 = (RK_U16 *)(base + n * 10);
|
||||||
|
|
||||||
|
pix[0] = base_u16[0] & 0x03FF;
|
||||||
|
pix[1] = (base_u16[0] & 0xFC00) >> 10 | (base_u16[1] & 0x000F) << 6;
|
||||||
|
pix[2] = (base_u16[1] & 0x3FF0) >> 4;
|
||||||
|
pix[3] = (base_u16[1] & 0xC000) >> 14 | (base_u16[2] & 0x00FF) << 2;
|
||||||
|
pix[4] = (base_u16[2] & 0xFF00) >> 8 | (base_u16[3] & 0x0003) << 8;
|
||||||
|
pix[5] = (base_u16[3] & 0x0FFC) >> 2;
|
||||||
|
pix[6] = (base_u16[3] & 0xF000) >> 12 | (base_u16[4] & 0x003F) << 4;
|
||||||
|
pix[7] = (base_u16[4] & 0xFFC0) >> 6;
|
||||||
|
}
|
||||||
|
|
||||||
void dump_mpp_frame_to_file(MppFrame frame, FILE *fp)
|
void dump_mpp_frame_to_file(MppFrame frame, FILE *fp)
|
||||||
{
|
{
|
||||||
RK_U32 width = 0;
|
RK_U32 width = 0;
|
||||||
@@ -137,37 +152,15 @@ void dump_mpp_frame_to_file(MppFrame frame, FILE *fp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < height; i++, base_y += h_stride) {
|
for (i = 0; i < height; i++, base_y += h_stride) {
|
||||||
for (k = 0; k < width / 8; k++) {
|
for (k = 0; k < MPP_ALIGN(width, 8) / 8; k++)
|
||||||
RK_U16 *pix = (RK_U16 *)(tmp_line + k * 16);
|
rearrange_pix(tmp_line, base_y, k);
|
||||||
RK_U16 *base_u16 = (RK_U16 *)(base_y + k * 10);
|
fwrite(tmp_line, width * sizeof(RK_U16), 1, fp);
|
||||||
|
|
||||||
pix[0] = base_u16[0] & 0x03FF;
|
|
||||||
pix[1] = (base_u16[0] & 0xFC00) >> 10 | (base_u16[1] & 0x000F) << 6;
|
|
||||||
pix[2] = (base_u16[1] & 0x3FF0) >> 4;
|
|
||||||
pix[3] = (base_u16[1] & 0xC000) >> 14 | (base_u16[2] & 0x00FF) << 2;
|
|
||||||
pix[4] = (base_u16[2] & 0xFF00) >> 8 | (base_u16[3] & 0x0003) << 8;
|
|
||||||
pix[5] = (base_u16[3] & 0x0FFC) >> 2;
|
|
||||||
pix[6] = (base_u16[3] & 0xF000) >> 12 | (base_u16[4] & 0x003F) << 4;
|
|
||||||
pix[7] = (base_u16[4] & 0xFFC0) >> 6;
|
|
||||||
}
|
|
||||||
fwrite(tmp_line, width * sizeof(RK_U16) , 1, fp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < height / 2; i++, base_c += h_stride) {
|
for (i = 0; i < height / 2; i++, base_c += h_stride) {
|
||||||
for (k = 0; k < (width / 8); k++) {
|
for (k = 0; k < MPP_ALIGN(width, 8) / 8; k++)
|
||||||
RK_U16 *pix = (RK_U16 *)(tmp_line + k * 16);
|
rearrange_pix(tmp_line, base_c, k);
|
||||||
RK_U16 *base_u16 = (RK_U16 *)(base_c + k * 10);
|
fwrite(tmp_line, width * sizeof(RK_U16), 1, fp);
|
||||||
|
|
||||||
pix[0] = base_u16[0] & 0x03FF;
|
|
||||||
pix[1] = (base_u16[0] & 0xFC00) >> 10 | (base_u16[1] & 0x000F) << 6;
|
|
||||||
pix[2] = (base_u16[1] & 0x3FF0) >> 4;
|
|
||||||
pix[3] = (base_u16[1] & 0xC000) >> 14 | (base_u16[2] & 0x00FF) << 2;
|
|
||||||
pix[4] = (base_u16[2] & 0xFF00) >> 8 | (base_u16[3] & 0x0003) << 8;
|
|
||||||
pix[5] = (base_u16[3] & 0x0FFC) >> 2;
|
|
||||||
pix[6] = (base_u16[3] & 0xF000) >> 12 | (base_u16[4] & 0x003F) << 4;
|
|
||||||
pix[7] = (base_u16[4] & 0xFFC0) >> 6;
|
|
||||||
}
|
|
||||||
fwrite(tmp_line, width * sizeof(RK_U16) , 1, fp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MPP_FREE(tmp_line);
|
MPP_FREE(tmp_line);
|
||||||
|
Reference in New Issue
Block a user