Skip to content
Snippets Groups Projects
  1. Jan 20, 2025
    • Guillaume LA ROQUE's avatar
      v4l2: remove all decoder/encoder not supported · bfe9dad3
      Guillaume LA ROQUE authored
      
      Actually HAL register support of VP8/VP9 and some secure codec but we
      don't support it actually.
      
      Remove declaration of decoder/encoder for unsupported codec and remove
      all variable and check link to this codec.
      
      Fix VTS test :
      VtsHalMediaC2V1_0TargetMasterTest/PerInstance/Codec2MasterHalTest#ListComponents/0_default
      VtsHalMediaC2V1_0TargetMasterTest/PerInstance/Codec2MasterHalTest#ListComponents/1_software
      VtsHalMediaC2V1_0TargetComponentTest
      
      Signed-off-by: default avatarGuillaume La Roque <glaroque@baylibre.com>
      bfe9dad3
  2. Nov 26, 2024
  3. Sep 30, 2024
    • Treehugger Robot's avatar
    • Mattijs Korpershoek's avatar
      v4l2_codec2: encode: fix crash when input.buffers[0] is nullptr · e5b5b5f0
      Mattijs Korpershoek authored
      The client can crash the V4L2EncodeComponent by passing an input with
      one buffer where buffer==nullptr:
      
      F DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
      F DEBUG   : Build fingerprint: 'TI/am62p/am62p:14/UQ1A.240105.002/eng.mkorpe.20240325.115051:userdebug/test-keys'
      F DEBUG   : Revision: '0'
      F DEBUG   : ABI: 'arm64'
      F DEBUG   : Timestamp: 2024-04-09 07:53:02.494446645+0000
      F DEBUG   : Process uptime: 8s
      F DEBUG   : Cmdline: /vendor/bin/hw/android.hardware.media.c2@1.0-service-v4l2
      F DEBUG   : pid: 4949, tid: 4955, name: V4L2EncodeCompo  >>> /vendor/bin/hw/android.hardware.media.c2@1.0-service-v4l2 <<<
      F DEBUG   : uid: 1013
      F DEBUG   : tagged_addr_ctrl: 0000000000000001 (PR_TAGGED_ADDR_ENABLE)
      F DEBUG   : signal 0 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr --------
      F DEBUG   : Cause: null pointer dereference
      F DEBUG   :     x0  0000000000000000  x1  b400007acbed72e8  x2  b400007a3beda7f0  x3  0000000000000010
      F DEBUG   :     x4  020000797bedb2c0  x5  b400007a2bed1878  x6  0000000000000001  x7  7f7f7f7f7f7fff7f
      F DEBUG   :     x8  00000078e68d0710  x9  b40000795bed9990  x10 b40000795bed99a0  x11 0000000000000003
      F DEBUG   :     x12 0000000000000000  x13 0000000000000004  x14 0000000000000276  x15 0000000000000000
      F DEBUG   :     x16 0000007b7c1eac60  x17 0000007b80a6c770  x18 00000078e5aa2000  x19 b400007a0bede5a0
      F DEBUG   :     x20 00000078e68d07e0  x21 0000000000000000  x22 0000000000000000  x23 b400007a9bed6210
      F DEBUG   :     x24 0000000000000000  x25 00000078e68d1000  x26 0000000000000002  x27 0000007b8a387b88
      F DEBUG   :     x28 00000000000fc000  x29 00000078e68d0680
      F DEBUG   :     lr  0000007b7c1cbb20  sp  00000078e68d0680  pc  0000007b80a6c778  pst 0000000080000000
      F DEBUG   : 12 total frames
      F DEBUG   : backtrace:
      F DEBUG   :       #00 pc 0000000000069778  /vendor/lib64/libcodec2_vndk.so (C2Buffer::data() const+8) (BuildId: 1d42f8105aac0515945328329706c2e1)
      F DEBUG   :       #01 pc 0000000000042b1c  /vendor/lib64/libv4l2_codec2_components.so (android::V4L2EncodeComponent::queueTask(std::__1::unique_ptr<C2Work, std::__1::default_delete<C2Work> >)+348) (BuildId: 2f6128320f05c503e8ee6dc9e05df980)
      F DEBUG   :       #02 pc 00000000000470a8  /vendor/lib64/libv4l2_codec2_components.so (base::internal::Invoker<base::internal::BindState<void (android::V4L2EncodeComponent::*)(std::__1::unique_ptr<C2Work, std::__1::default_delete<C2Work> >), base::WeakPtr<android::V4L2EncodeComponent>, std::__1::unique_ptr<C2Work, std::__1::default_delete<C2Work> > >, void ()>::RunOnce(base::internal::BindStateBase*)+120) (BuildId: 2f6128320f05c503e8ee6dc9e05df980)
      F DEBUG   :       #03 pc 00000000000acca0  /vendor/lib64/libchrome.so (base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*)+192) (BuildId: 87e214635dddac0ae594ee401576361a)
      F DEBUG   :       #04 pc 00000000000cc9ac  /vendor/lib64/libchrome.so (base::MessageLoop::RunTask(base::PendingTask*)+348) (BuildId: 87e214635dddac0ae594ee401576361a)
      F DEBUG   :       #05 pc 00000000000ccd84  /vendor/lib64/libchrome.so (base::MessageLoop::DoWork()+468) (BuildId: 87e214635dddac0ae594ee401576361a)
      F DEBUG   :       #06 pc 00000000000ce080  /vendor/lib64/libchrome.so (base::MessagePumpDefault::Run(base::MessagePump::Delegate*)+96) (BuildId: 87e214635dddac0ae594ee401576361a)
      F DEBUG   :       #07 pc 00000000000f1fec  /vendor/lib64/libchrome.so (base::RunLoop::Run()+60) (BuildId: 87e214635dddac0ae594ee401576361a)
      F DEBUG   :       #08 pc 0000000000111e88  /vendor/lib64/libchrome.so (base::Thread::ThreadMain()+392) (BuildId: 87e214635dddac0ae594ee401576361a)
      F DEBUG   :       #09 pc 000000000010f040  /vendor/lib64/libchrome.so (base::(anonymous namespace)::ThreadFunc(void*)+128) (BuildId: 87e214635dddac0ae594ee401576361a)
      F DEBUG   :       #10 pc 00000000000d6fb0  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+208) (BuildId: 218db69eb66aeb253a34d956906a8bba)
      F DEBUG   :       #11 pc 000000000006ad90  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64) (BuildId: 218db69eb66aeb253a34d956906a8bba)
      
      This is tested by VtsHalMediaC2V1_0TargetComponentTest#testInputBuffer().
      
      Fix this by guarding against this condition, as done in SimpleC2Component[1]
      
      [1] https://android.googlesource.com/platform/frameworks/av/+/refs/heads/main/media/codec2/components/base/SimpleC2Component.cpp#1141
      
      
      Test: atest VtsHalMediaC2V1_0TargetComponentTest
      Change-Id: I407f8f7fb420bd993a665c0a7cb10ad1e224d0fb
      Signed-off-by: default avatarMattijs Korpershoek <mkorpershoek@baylibre.com>
      e5b5b5f0
    • Mattijs Korpershoek's avatar
      v4l2_codec2: decode: allow calling reset() from stop state · e1809faa
      Mattijs Korpershoek authored
      
      Right now, the reset() operation just calls stop().
      
      When a client calls stop() followed by reset(), reset() returns a
      C2_BAD_STATE error. (since we are already STOPPED).
      
      According to the framework documentation (C2Component.h), reset can *only*
      return C2_BAD_STATE when the component is in release state.
      
      Test if we are already STOPPPED and if so, do a no-op by returning C2_OK.
      
      Test: atest VtsHalMediaC2V1_0TargetComponentTest
      Change-Id: I4095c0a9db43a017d3476224d33534748e2251f5
      Signed-off-by: default avatarMattijs Korpershoek <mkorpershoek@baylibre.com>
      e1809faa
  4. Sep 06, 2024
    • Xin Li's avatar
      Merge 24Q3 to AOSP main · 5c00f2d1
      Xin Li authored
      Bug: 357762254
      Merged-In: Ieec0794c4bd537a334196f4fb773631fc0cf76b1
      Change-Id: Ideb7482713852a769966e68c0ab978250a1c2d3c
      5c00f2d1
  5. Sep 04, 2024
    • Michał Krawczyk's avatar
    • Michał Krawczyk's avatar
      EncodeComponent: clamp dynamic framerate for H264 · 50a7a415
      Michał Krawczyk authored
      The user app can provide buffers to the encoder directly via MediaCodec
      API (queueInputBuffer) or via InputSurface.
      
      In case the input surface is used, the timestamps of the encoded frames
      are automatically generated, as they're being considered as a real-time
      traffic (for example - from screen capture session or the camera input).
      
      Also the Component is supposed to dynamically adjust the framerate based
      on the input frames timestamps (see b/192419592).
      
      The dynamic framerate calculation may provide extreme framerate values,
      which will cause encoder failures because of too high MBPS for the given
      profile. One such case was detected by test
      android.media.codec.cts.MediaCodecTest#testAbruptStop after OMX removal.
      
      As the CTS test itself can generate such values, the encoder was
      updated to calculate the maximum allowed framerate for the input frame
      size and output level. Then this value is used to limit the dynamic
      framerate calculations. As it can be potentially an app error, the
      warning is printed whenever this happens.
      
      Note: this is currently done only for H264. For other codecs the
      clamping won't be effective, as the maximum allowed framerate is set to
      uint32_t::max().
      
      Bug: 295339810
      Bug: 362902868
      Test: android.media.codec.cts.MediaCodecTest#testAbruptStop
      Test: com.google.android.media.gts.RtcVideoCodecTest#testDynamicFramerateChangeVp8
      Change-Id: I783493453d762886a10996d0ad9821149cafb014
      50a7a415
  6. Jun 18, 2024
  7. Jun 17, 2024
  8. Jun 13, 2024
    • Xin Li's avatar
      Merge Android 14 QPR3 to AOSP main · b4c7f490
      Xin Li authored
      Bug: 346855327
      Merged-In: Ie336e0729fb3194f7fb81a26ccbaa3e53f100f35
      Change-Id: I425af3755c0b231f4f610bf34879c574df894db0
      b4c7f490
  9. May 29, 2024
  10. May 14, 2024
  11. May 06, 2024
  12. Mar 07, 2024
  13. Mar 06, 2024
    • Xin Li's avatar
      Merge Android 14 QPR2 to AOSP main · b1539bd8
      Xin Li authored
      Bug: 319669529
      Merged-In: Id57ac546595fde736a32d17f61039b44107f413e
      Change-Id: I2f803594c587ed291e5f86f82779cadc5c1a77e4
      b1539bd8
  14. Feb 28, 2024
    • Hubert Mazur's avatar
      v4l2: Increase the buffer size of bitstream · 7e15865d
      Hubert Mazur authored
      The allocated buffer size for the encoded bitstream is always set to 1MB
      which might not be always accurate. It is possible to exceed it when
      high bitrates are used, like 10Mb/s. The encoder might put zeros
      to the output buffer to meet required bitstream. Also in case of slow
      devices the encoder might put zeros to meet the time constraints.
      For the sake of compatibility, set it to the same values as the Chrome
      browser does for a 1080p stream.
      
      Bug: 326164993
      Test: CtsMediaCodecTestCases
      Change-Id: I4c2d06da588d2a12a593bbba3461384d8b3dffca
      7e15865d
  15. Jan 31, 2024
  16. Jan 24, 2024
  17. Jan 23, 2024
  18. Jan 22, 2024
  19. Jan 05, 2024
    • yangbill's avatar
      Convert external/v4l2_codec2/tests using Android.bp · 69678074
      yangbill authored
      Bug: 318786916
      Test: lunch aosp_cf_x86_64_phone-trunk_staging-userdebug ; \
            m C2E2ETest (Can not find module)
      Test: Add "PRODUCT_SOONG_NAMESPACES += external/v4l2_codec2" to
            device/google/cuttlefish/shared/device.mk
            lunch aosp_cf_x86_64_phone-trunk_staging-userdebug ; \
            m C2E2ETest (Build Pass)
      Change-Id: Ie8ffae13b763b0e1190b46cc7b09daf14d61524c
      69678074
  20. Dec 06, 2023
  21. Dec 05, 2023
    • Prameet Shah's avatar
      Explicitly specify ::base · aa357b36
      Prameet Shah authored
      The original change ag/25539865 was submitted in `main`. Backporting it
      to this branch to reduce divergence.
      
      Bug: 314693926
      Bug: 314784915
      Test: m
      Change-Id: I25a226b8eb962138489f30cd0fa1a42c3e599bdf
      aa357b36
  22. Dec 04, 2023
    • Daichi Hirono's avatar
      Explicitly specify ::base · 0378da79
      Daichi Hirono authored
      The upstream includes these headers after declaring android::base
      namespace, which resulted in confusing the compiler libchrome's ::base
      v.s. android::base
      
      Bug: 314693926
      Test: m
      Change-Id: I25a226b8eb962138489f30cd0fa1a42c3e599bdf
      0378da79
  23. Nov 28, 2023
    • Michał Krawczyk's avatar
      V4L2Decoder: do not check for DRC for secure codec · 26fc5733
      Michał Krawczyk authored
      It's not possible to access the frame data if the secure codec is used.
      
      An attempt to map() such data will result in an error, and attempt to
      wait for the DRC will cause a nullptr dereference.
      
      This patch adds a workaround, which skips the DRC verification if the
      secure codec is used.
      
      Bug: 280853786
      Bug: 274864105
      Test: GtsExoPlayerTestCases
      Change-Id: I5b9d990c87b8afef2817f6bb9b9d8afb42017ca9
      (cherry picked from commit 8fce6a632586b49aa23b14235363dca0f1fe0a7c)
      26fc5733
    • Zyta Szpak's avatar
      Reland: "V4L2Decoder: Check if waiting for DRC needed"" · 40700d27
      Zyta Szpak authored
      This reverts commit c69b69e501cc928a7bcb1867f26ae9423744c709.
      
      Reason for revert: this original commit revealed another bug
      that got fixed in Chrome and verified by security tests. It
      can now be safely relanded.
      
      Bug: 280853786
      Bug: 274864105
      Test: android.media.cts.DecoderTest#testEOSBehaviorVP9
      Change-Id: I6de423c5b8e6b9d11208d71d279b8ae31cf73f2d
      (cherry picked from commit ea9b7f077241a75f461f73e292298a6797e72276)
      40700d27
    • Zyta Szpak's avatar
      V4L2Decoder: Terminate drain if host is not streaming · 56ebfa4c
      Zyta Szpak authored
      While testing ARM devices a corner case was discovered
      that before the first resolution change event is dequeued
      Chrome output queues and host driver CAPTURE queues are
      not streaming but ARCVM has no knowledge of it. Drain
      never finishes because output EOS is expected.
      Marking that the resolution change was dequeued allows
      to recognize this state and act accordingly when handling
      drain.
      
      Bug: 280853786
      Bug: 232395110
      Test: android.mediav2.cts.CodecDecoderTest#testOnlyEos[15(video/avc)]
      Change-Id: I27d0f73a26d31f32a7e4cb473e685278b07f72a3
      (cherry picked from commit 05f380eb88f25cb6d598b01ca80a18860de527c7)
      56ebfa4c
Loading