aboutsummaryrefslogtreecommitdiff
path: root/components/V4L2DecodeInterface.cpp
AgeCommit message (Collapse)Author
2022-05-26v4l2_codec2: Add support for HEVC/H265 to the V4L2 decoder.Jeffrey Kardatzke
This adds support for the HEVC/H265 codec to the Android codec2 V4L2 decode component. Bug: 215043150 Bug: 183217901 Test: ExoPlayer works with HEVC on guybrush w/ codecs added and corresponding ChromeOS CLs for crosvm/libvda Change-Id: I3707e9730d245871b74982527edfebe81b484e8a (cherry picked from commit 05bacef7fa53541f21c85f26f6f8351dcdfd7f0e)
2021-05-12v4l2_codec2: Move V4L2 device and device poller to common code.David Staessens
This CL Move the V4L2 device and V4L2 device poller files to the common code folder. In a next step these files will be cleaned up and reworked into proper Android code, but splitting the move into a separate CL makes the review process a lot easier. Bug: 155138142 Test: arc.VideoEncodeAccel.h264_192p_i420_vm Change-Id: I4c4c9d7f5c7e85feed10ed1e3fd9b8fa14ca67ae
2021-03-29components: Add C2_PARAMKEY_COMPONENT_KIND parameterChih-Yu Huang
This CL adds C2_PARAMKEY_COMPONENT_KIND parameter for both decode and encode components. Bug: 183910489 Test: android.media.cts.AdaptivePlaybackTest#testH264_adaptiveDrc Change-Id: I8a90ed95aefa7d6dd018ead3ec0dfa79d4960ee9
2021-03-25V4L2DecodeInterface: switch to C2AllocatorStore::DEFAULT_LINEARChih-Yu Huang
Originally we use C2AllocatorBlob for linear allocator. Actually the recommended linear allocator is C2AllocatorIon. The better way is to use C2AllocatorStore::DEFAULT_LINEAR id, and choose C2AllocatorBlob by setting the value of "debug.stagefright.c2-poolmask" at device.mk. Bug: 170199771 Test: android.media.cts.AdaptivePlaybackTest Change-Id: I8976009fe8624009e78fe115554609da74901431 (cherry picked from commit d352bd3b4b4a5fc4f74abc12d0f9697989ac0800)
2021-01-12V4L2DecodeInterface: use correct picture size to calculate size of input buffersChih-Yu Huang
This CL removes unused variables at V4L2DecodeInterface, and uses the correct picture size to calculate the size of input buffers. Bug: 175270843 Test: com.google.android.media.gts.WidevineH264PlaybackTests#testCbcsL1WithUHD30 Change-Id: Ieaf4ee4355d462f9f70f890ef8dd2e140ac33771
2021-01-12components: Set InputBufferManager intervalDavid Stevens
InputBufferManager notifies the codec2 framework when the component no longer has any references to an input buffer. While a dedicated release notification is necessary in some circumstances, the release can usually be done when the corresponding work item is completed, to reduce the amount of IPC. This change sets the notification interval used by InputBufferManager to reduce how often a dedicated release notification is sent. Bug: 172184040 Test: tast run DUT arc.VideoDecodeAccel.vp8_vm Change-Id: Id6371d328bb00730b50d3b3075eccf4010554f27
2020-08-26V4L2DecodeInterface: Add the comment for C2_PARAMKEY_PICTURE_SIZEChih-Yu Huang
This CL adds the comment that we forgot to mention in ag/12444944. Bug: 165826281 Test: None Change-Id: I27c592ea1aa946e51c7c3075100c0e67761c1dee
2020-08-26V4L2DecodeInterface: Use fixed number for C2_PARAMKEY_PICTURE_SIZEChih-Yu Huang
Every C2ComponentInterface would be initiated at Android bootup time. We want to avoid heavy action in the interface initialization. This CL relaxes the parameter check by using the maximum fixed number instead of querying the capability from V4L2 device. Bug: 165826281 Test: pass tast.arc.VideoDecodeAccel.h264_vm Change-Id: Id15deb2715f88dca3618c571087aa6d08410b7e3
2020-07-30plugin_store: Switch to use C2VdaPooledBlockPoolChih-Yu Huang
The V4L2 stateful API requires the caller pass the same buffers to the output queue slot. Originally we use C2PooledBlockPool for byte buffer mode, but C2PooledBlockPool cannot get buffer identifier. This CL switches to use C2VdaPooledBlockPool, which guarantees to return a fixed set of buffers and could query the buffer index. Bug: 161770200 Test: pass e2e test Change-Id: Ief2bdd9ceb6655cd47627ccf6c239a1e6d73482e
2020-07-09V4L2DecodeComponent: Support protected playback.Chih-Yu Huang
In this CL, V4L2DecodeComponent supports the protected playback by using C2VdaBqBlockPool. To use C2VdaBqBlockPool, there are 2 specific requirements compared to a normal C2BlockPool: 1. Call C2VdaBqBlockPool::requestNewBufferSet() before fetching blocks 2. Call MarkBlockPoolDataAsShared() after creating C2ConstGraphicBlock Bug: 153608694 Test: Run ExoPlayer Demo apk: Widevine dash policy tests Change-Id: Idce298d13cb2fb7f9dd88ae43cd4c8f0cb18dffb
2020-06-03V4L2DecodeInterface: add C2_PARAMKEY_OUTPUT_DELAY for H264Chih-Yu Huang
C2_PARAMKEY_OUTPUT_DELAY is the number of additional output frames that needs to be generated before an output can be released by the component. H264 may reorder the output frames, so we set C2_PARAMKEY_OUTPUT_DELAY to the possible maximum number of reoder frames. Bug: 153403351 Test: pass E2E test TestSimpleDecode for H264 Change-Id: I13ad1dc60bb8674e09250163ec6c6b186fec26a4
2020-06-02components: Implement Codec2.0 V4L2 decode componentChih-Yu Huang
This CL implements V4L2DecodeComponent, a decode C2Component via V4L2 API. It mainly contains these parts: - VideoDecoder: An interface for video decoding, similar to media::VideoDecoder at Chromium project. - V4L2Decoder: An implementation of VideoDecoder via V4L2 stateful API. We wrap all V4L2-related logic in this class - VideoFrame The data structure to represent the output buffer of VideoDecoder. It encapsulates a C2GraphicBlock and only exposes the essential information of physical buffers. - VideoFramePool: The buffer pool used by VideoDecoder. It encapsulates C2BlockPool and provides asynchronous method to fetch buffers. - V4L2DecodeComponent, V4L2DecodeInterface: The C2Component implementation that delegates the decode request to V4L2Decoder. - V4L2ComponentFactory: The C2ComponentFactory that creates V4L2DecodeComponent. Bug: 152714603 Test: mmm external/v4l2_codec2/ Test: Run e2e test and make sure the V4L2DecodeComponent is running Change-Id: I23e9b3553b62dd6c83d943d7787297305372c37d