codec2: vts-video: align input buffer size for decoders

Hardware decoders expect minimum PAGE_SIZE alignment.

Test:
   VtsHalMediaC2V1_0TargetVideoDecTest -C c2.qti.hevc.decoder -P /sdcard/res/ -I default

Bug: 135427312

Change-Id: I14ee2f93d644450679500d507e775ad16afead6d
gugelfrei
Praveen Chavan 5 years ago committed by Pawin Vongmasa
parent ff52d12ac1
commit 9694a99645

@ -46,6 +46,10 @@ class LinearBuffer : public C2Buffer {
explicit LinearBuffer(const std::shared_ptr<C2LinearBlock>& block)
: C2Buffer(
{block->share(block->offset(), block->size(), ::C2Fence())}) {}
explicit LinearBuffer(const std::shared_ptr<C2LinearBlock>& block, size_t size)
: C2Buffer(
{block->share(block->offset(), size, ::C2Fence())}) {}
};
static ComponentTestEnvironment* gEnv = nullptr;
@ -371,11 +375,12 @@ void decodeNFrames(const std::shared_ptr<android::Codec2Client::Component>& comp
ASSERT_EQ(eleStream.gcount(), size);
work->input.buffers.clear();
auto alignedSize = ALIGN(size, PAGE_SIZE);
if (size) {
std::shared_ptr<C2LinearBlock> block;
ASSERT_EQ(C2_OK,
linearPool->fetchLinearBlock(
size, {C2MemoryUsage::CPU_READ, C2MemoryUsage::CPU_WRITE},
alignedSize, {C2MemoryUsage::CPU_READ, C2MemoryUsage::CPU_WRITE},
&block));
ASSERT_TRUE(block);
@ -385,13 +390,13 @@ void decodeNFrames(const std::shared_ptr<android::Codec2Client::Component>& comp
fprintf(stderr, "C2LinearBlock::map() failed : %d", view.error());
break;
}
ASSERT_EQ((size_t)size, view.capacity());
ASSERT_EQ((size_t)alignedSize, view.capacity());
ASSERT_EQ(0u, view.offset());
ASSERT_EQ((size_t)size, view.size());
ASSERT_EQ((size_t)alignedSize, view.size());
memcpy(view.base(), data, size);
work->input.buffers.emplace_back(new LinearBuffer(block));
work->input.buffers.emplace_back(new LinearBuffer(block, size));
free(data);
}
work->worklets.clear();

@ -23,6 +23,8 @@
#define ENC_DEFAULT_FRAME_HEIGHT 288
#define MAX_ITERATIONS 128
#define ALIGN(_sz, _align) ((_sz + (_align - 1)) & ~(_align - 1))
/*
* Common video utils
*/

Loading…
Cancel
Save