Skip to content

Commit 3c2063c

Browse files
MicroYYSherry-Lin
authored andcommitted
Revert "vaGetImage optimization on D-card."
This reverts commit b67820f.
1 parent 48fa9d3 commit 3c2063c

File tree

2 files changed

+65
-2
lines changed

2 files changed

+65
-2
lines changed

media_driver/linux/common/ddi/media_libva.cpp

+32-1
Original file line numberDiff line numberDiff line change
@@ -5255,6 +5255,9 @@ static VAStatus DdiMedia_CopySurfaceToImage(
52555255
}
52565256
}
52575257

5258+
if (image->format.fourcc != VA_FOURCC_NV12)
5259+
flag = flag | MOS_LOCKFLAG_NO_SWIZZLE;
5260+
52585261
void* surfData = DdiMediaUtil_LockSurface(surface, flag);
52595262

52605263
if (surfData == nullptr)
@@ -5272,9 +5275,32 @@ static VAStatus DdiMedia_CopySurfaceToImage(
52725275
return vaStatus;
52735276
}
52745277

5275-
uint8_t *ySrc = (uint8_t*)surfData;
5278+
uint8_t *ySrc = nullptr;
52765279
uint8_t *yDst = (uint8_t*)imageData;
52775280

5281+
uint8_t* swizzleData = nullptr;
5282+
5283+
if (!surface->pMediaCtx->bIsAtomSOC && surface->TileType != I915_TILING_NONE && image->format.fourcc != VA_FOURCC_NV12)
5284+
{
5285+
swizzleData = (uint8_t*)MOS_AllocMemory(surface->data_size);
5286+
if (nullptr != swizzleData)
5287+
{
5288+
SwizzleSurface(surface->pMediaCtx, surface->pGmmResourceInfo, surfData, (MOS_TILE_TYPE)surface->TileType, (uint8_t*)swizzleData, false);
5289+
ySrc = swizzleData;
5290+
}
5291+
else
5292+
{
5293+
DDI_ASSERTMESSAGE("nullptr swizzleData.");
5294+
DdiMedia_UnmapBuffer(ctx, image->buf);
5295+
DdiMediaUtil_UnlockSurface(surface);
5296+
return VA_STATUS_ERROR_INVALID_BUFFER;
5297+
}
5298+
}
5299+
else
5300+
{
5301+
ySrc = (uint8_t*)surfData;
5302+
}
5303+
52785304
DdiMedia_CopyPlane(yDst, image->pitches[0], ySrc, surface->iPitch, image->height);
52795305
if (image->num_planes > 1)
52805306
{
@@ -5296,6 +5322,11 @@ static VAStatus DdiMedia_CopySurfaceToImage(
52965322
}
52975323
}
52985324

5325+
if (nullptr != swizzleData)
5326+
{
5327+
MOS_FreeMemory(swizzleData);
5328+
swizzleData = nullptr;
5329+
}
52995330
vaStatus = DdiMedia_UnmapBuffer(ctx, image->buf);
53005331
if (vaStatus != VA_STATUS_SUCCESS)
53015332
{

media_softlet/linux/common/ddi/media_libva_interface_next.cpp

+33-1
Original file line numberDiff line numberDiff line change
@@ -1595,6 +1595,11 @@ VAStatus MediaLibvaInterfaceNext::CopySurfaceToImage(
15951595
}
15961596
}
15971597

1598+
if (image->format.fourcc != VA_FOURCC_NV12)
1599+
{
1600+
flag = flag | MOS_LOCKFLAG_NO_SWIZZLE;
1601+
}
1602+
15981603
void *surfData = MediaLibvaUtilNext::LockSurface(surface, flag);
15991604
if (surfData == nullptr)
16001605
{
@@ -1611,8 +1616,30 @@ VAStatus MediaLibvaInterfaceNext::CopySurfaceToImage(
16111616
return vaStatus;
16121617
}
16131618

1614-
uint8_t *ySrc = (uint8_t*)surfData;
1619+
uint8_t *ySrc = nullptr;
16151620
uint8_t *yDst = (uint8_t*)imageData;
1621+
uint8_t *swizzleData = nullptr;
1622+
1623+
if (!surface->pMediaCtx->bIsAtomSOC && surface->TileType != I915_TILING_NONE && image->format.fourcc != VA_FOURCC_NV12)
1624+
{
1625+
swizzleData = (uint8_t*)MOS_AllocMemory(surface->data_size);
1626+
if (nullptr != swizzleData)
1627+
{
1628+
MediaLibvaUtilNext::SwizzleSurface(surface->pMediaCtx, surface->pGmmResourceInfo, surfData, (MOS_TILE_TYPE)surface->TileType, (uint8_t*)swizzleData, false);
1629+
ySrc = swizzleData;
1630+
}
1631+
else
1632+
{
1633+
DDI_ASSERTMESSAGE("nullptr swizzleData.");
1634+
UnmapBuffer(ctx, image->buf);
1635+
MediaLibvaUtilNext::UnlockSurface(surface);
1636+
return VA_STATUS_ERROR_INVALID_BUFFER;
1637+
}
1638+
}
1639+
else
1640+
{
1641+
ySrc = (uint8_t*)surfData;
1642+
}
16161643

16171644
CopyPlane(yDst, image->pitches[0], ySrc, surface->iPitch, image->height);
16181645
if (image->num_planes > 1)
@@ -1635,6 +1662,11 @@ VAStatus MediaLibvaInterfaceNext::CopySurfaceToImage(
16351662
}
16361663
}
16371664

1665+
if (nullptr != swizzleData)
1666+
{
1667+
MOS_FreeMemory(swizzleData);
1668+
swizzleData = nullptr;
1669+
}
16381670
vaStatus = UnmapBuffer(ctx, image->buf);
16391671
if (vaStatus != VA_STATUS_SUCCESS)
16401672
{

0 commit comments

Comments
 (0)