Commit graph

71 commits

Author SHA1 Message Date
Herman Chen
ecbbb721aa fix[allocator]: Fix misc buffer group flag issue
The default misc buffer group do not have the flag. We need to seperate
the default misc group with different flag.

Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
Change-Id: I14941eedfe9c06ec978a12061ba33e12495aa038
2025-04-18 01:54:32 +00:00
Yandong Lin
ea8b5af151 fix[mpp]: Fix compile warning with ipc sdk toolchain
Signed-off-by: Yandong Lin <yandong.lin@rock-chips.com>
Change-Id: I206b473b904e69d10644897e47ba1933ada8204d
2025-04-03 14:43:14 +08:00
Herman Chen
729e57a6d7 fix[base]: Fix strncpy compile warning
Change-Id: I8c282e20251b2e3e7ea0f67bf0a89bb0dc0fb6a9
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2025-03-17 10:08:51 +00:00
Herman Chen
51eb00cc4c fix[mpp_buffer]: Fix buffer put log
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
Change-Id: If303b5de7e6b0b9d685b4f700d91a32e716210fb
2024-12-12 14:37:22 +08:00
Hongjin Li
44f56822f7 fix[mpp_buffer]: Synchronous log addition point
Inc/dec logs are added after ref_count changes

Signed-off-by: Hongjin Li <vic.hong@rock-chips.com>
Change-Id: I6c358d077c5437d47305c5e211ae9999ca7a8b8f
2024-08-05 08:53:56 +08:00
Yandong Lin
4874c0b425 fix[mpp_buffer]: attach fd if invalid iova when get iova
Change-Id: I887812b2c9e17e18826375705b45fbae42ba3826
Signed-off-by: Yandong Lin <yandong.lin@rock-chips.com>
2024-06-18 14:50:39 +08:00
Yandong Lin
3cf927ef14 fix[mpp_buffer]: fix dec/inc ref_count in multi threads
when the ref_count == 1.
Thread A:                      Thread B:
  mpp_buffer_ref_dec:
   1. buffer->lock
   2. buffer->ref_count--
   3. buffer->unlock
                    ───────► mpp_buffer_ref_inc
                                 1. buffer->lock
                                 2. buffer->ref_count++
                                 3. buffer->unlock
   4. put_buffer(); ◄───────
        list_del_init
        group->count_unused++
        buffer->used = 0
                    ───────► mpp_buffer_ref_dec:
                               list_del_init

Change-Id: I32eb38901dac26fcf6c8cd39d501c5d36dee77a2
Signed-off-by: Yandong Lin <yandong.lin@rock-chips.com>
2024-05-13 09:37:05 +08:00
Herman Chen
c66b20af0e feat[mpp_buffer]: Add MppBuffer attach/detach func
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
Signed-off-by: Yandong Lin <yandong.lin@rock-chips.com>
Change-Id: I696b6bec049edcdd4e30d168428f43f3dad9c199
2024-03-29 10:02:00 +08:00
Johnson Ding
11055c198a fix[mpp_buffer]: fix buffer type assigning
Change-Id: I340ff30729143b2d5c7fba7d145b1a8f5d38d0ef
Signed-off-by: Johnson Ding <johnson.ding@rock-chips.com>
2024-03-18 17:43:22 +08:00
Herman Chen
6ce3007994 refactor[allocator]: Refactor allocator flow
1. Allocator api is determined by buffer type.
2. Allocator ctx is determined by both buffer type and buffer flags.
3. All allocator dma_heap / drm / ion / ext_dma should support different
buffer flags.
4. The buffer flag supports cacheable / 32-bit / contig options.
5. Add flags update flow on allocator create process.
6. Add mpp_dmabuf_has_partial_ops to disable dmabuf partial ops when the
kernel driver has bug.

Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
Change-Id: If36a05c6704112cad3ab46861023597ff02bf14c
2023-11-29 09:54:36 +08:00
Rimon Xu
630bcb9000 [mpp_group]: Add allocator with flags
We need get different allocator when alloc buffer with flags, such
as ion,drm,dma_heap, all must be supported.

Signed-off-by: Rimon Xu <rimon.xu@rock-chips.com>
Change-Id: Id128c7420f0defa65500ef19c25e193ff1b56a8a
2023-11-29 09:54:36 +08:00
Yanjun Liao
ce39aff31f feat[dec_test]: Add buffer mode option
Add an option in dec_test to demo zero-copy external buffers mode.

use -bufmode to config the buffer mode option
hl - half internal mode
i  - pure internal mode
e  - pure external mode

Change-Id: Ib92c30acd8c370843becb286c935de056b09bcbd
Signed-off-by: Yanjun Liao <yanjun.liao@rock-chips.com>
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2023-11-29 09:54:36 +08:00
xueman.ruan
e15972e9af feat[mpp_dmabuf]: Add dmabuf sync operation
sync_begin - cache invalidate, should be called before cpu read
sync_end   - cache flush, should be called after cpu write

MppBuffer sync flow:
1. hw access
2. sync_begin
3. cpu access (read / write)
4. sync_end
5. hw access

NOTE: readonly option is faster for read only buffer.

Signed-off-by: xueman.ruan <xueman.ruan@rock-chips.com>
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
Change-Id: I253a6139e9bb30808c07075d64f17b5cfad8519a
2023-11-16 14:27:02 +08:00
xueman.ruan
062c175265 [hal_jpege]: Add dma heap options for JPEG encode.
use cachable dma buffer to reduce copy time.

Signed-off-by: xueman.ruan <xueman.ruan@rock-chips.com>
Change-Id: I7fcc0fa5942ea5aa4e247b5f10677843d006ff28
2023-02-21 20:57:26 +08:00
Grey Li
5d3623ac29 [mpp_buffer]: fix group callback crash
thread1:
  1)control(MPP_DEC_SET_EXT_BUF_GROUP)
  2)mpp_buffer_group_set_callback
    p->callback = callback;
thread2:
  1)mpp_buffer_commit
  2)mpp_buffer_create
    group->callback(group->arg, group);
    But arg is NULL now.

backtrace:
  #00 (Mpp::notify(void*))
  #01 (mpp_buffer_create+712)
  #02 (mpp_buffer_import_with_tag+212)
  #03 (commit_memory_handle+116)

Signed-off-by: Grey Li <grey.li@rock-chips.com>
Change-Id: Id50e2f1b46d127c8bf0fe8080751949fcccc6e25
2022-12-23 18:23:09 +08:00
Herman Chen
2b35cee0ce [mpp_log]: Add more log helper function
1. Move mpp_log.h to inc for external user.
2. Add mpp_debug.h for mpp internal logging.
3. Fix some warning.
4. Add log level setup function.
5. Check env log_level value in mpp_get_log_level call.

NOTE:
1. mpp internal module should use mpp_debug.h and mpp external user
should use mpp_log.h
2. Use mpp_get_log_level to update mpp_log_level when the env changed.

Change-Id: I90a55a02a72db177533013280dfe111ca3479229
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2022-05-20 11:42:10 +08:00
Jeffy Chen
c07169d533 [misc]: Fix a few compile warnings and errors
Reported by llvm-clang.

Change-Id: I62f22fe5754d3e8d77405d213c81fda5d9f5e27d
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
2022-03-11 17:45:10 +08:00
Herman Chen
df30589e30 [mpp_buffer]: Dump buffer group when size mismatch
Change-Id: Ic2306122b7f7cf45a683970ec047cedd42984b69
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2022-03-04 11:20:36 +08:00
Herman Chen
f0c57cde02 [mpp_lock]: Add gcc atomic macro define
Change-Id: I3e94cc7be9a51f5d674a132c0a2e6f7afba61d34
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2021-11-03 11:27:35 +08:00
Herman Chen
026a768de5 [mpp_buffer]: Reduce lock usage
Change-Id: I639922cf582feea5e027edfb2ae0dd9a9fb85bd6
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2021-10-22 11:47:46 +08:00
Herman Chen
1732ff2549 [mpp_buffer]: Add caller when using mpp_mem_pool
Change-Id: I7275d68c08b15fb0413585e7e0d0fdf7af204162
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2021-10-08 09:09:28 +08:00
Herman Chen
c37a9ba095 [mpp_buffer]: Fix crash on cleanup leaked buffer
Change-Id: Ie795bb693c904e9c57d9d6af98564fedd0019ead
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2021-07-01 14:27:12 +08:00
Herman Chen
69211067c9 [mpp_buffer]: Fix miss lock on searching group
1. In mpp_buffer_ref_dec it should be locked on search group by id.
2. Remove extra hash_32 on adding new group.
3. Improve id searching on id overflow.

Change-Id: Ibef4612e48b5a4c9dd6c5eca6c85f8ccba813827
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2021-06-29 10:21:23 +08:00
Herman Chen
17a872e4b9 [mpp_buffer]: Fix error on releasing leaked buffer
The static lock maybe release before mpp_buffer_service. So we should
not used the lock on finalizing stage.

Change-Id: Ibf207e02e4fcdc2b5280ea58bd68372a7888a60a
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2021-06-25 11:17:38 +08:00
Herman Chen
2204012fb3 [mpp_buffer]: Fix error on buffer group reset
At buffer create stage and ref_count is still zero if buffer group reset
happens the just created buffer will be marked discard and cause error.

Change-Id: Idc163f81edd055d8cc33ce6d80ca041adc973878
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2021-05-12 20:31:56 +08:00
Herman Chen
c6d2144afa [mpp_buffer]: Use mem pool reduce malloc/free
Use mpp_mem_pool to reduce MppBufferImpl and MppBufferGroupImpl malloc
and free.

Change-Id: I6331aefddf7ee8eb578a638d86a276891aa61ee7
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2021-05-06 14:03:32 +08:00
Herman Chen
cdec28698c [mpp_buffer]: Add info dump on buffer leaked
Change-Id: Ida823d6bbfa06a846546b554d6b3a218418deadd
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2021-04-30 18:43:16 +08:00
Herman Chen
7d8b6414c3 [mpp_buffer]: Use new mutex lock
Replace service lock with buffer lock, group lock and smaller service
lock.

Change-Id: Ic8ff9fae714b0362f43df23008efce49fe16b9ce
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2021-04-30 18:43:16 +08:00
Herman Chen
0e0071db2b [mpp_buffer]: Use fixed array to record history
Change-Id: I9d651fd381abe0d25794aefb3f1ca44826b74939
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2021-04-30 18:43:16 +08:00
Herman Chen
ffbd5c042a [mpp_buffer]: Get allocator on MppService created
Store allocator to MppBuffer to remove dependency from buffer to group.

Change-Id: I7ae136d12bb30cb989b6352989df3b0b3477ad98
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2021-04-30 18:43:16 +08:00
Herman Chen
fdbaa67b23 [mpp_buffer]: Use hashtable to search buffer group
When there are a lot of buffer groups created the search speed will be
slow. We should use hashtable to speed up.

Change-Id: I9ceeaa5a72eedf81597eeb83b34d417c74ceae04
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2021-04-21 14:43:56 +08:00
Herman Chen
a91439bef4 [mpp_buffer]: Add mem and buffer usage function
Change-Id: I356ef9311802868fe8d234dbff178ad8463985d0
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2021-04-20 14:39:52 +08:00
Herman Chen
6ff78b1bd6 [mpp_buffer]: Fix error on release orphan group
Change-Id: Ib915000941a2380c908b6c6f934b4b8bb8680fa9
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
Signed-off-by: Fu Yuhao <fuyuhao@sunniwell.net>
2020-12-01 16:35:20 +08:00
Herman Chen
0520b7d35d [meta/buffer]: Fix usage after service is destoyed
When C++ global destructor is called MppBufferService and MppMetaService
maybe be called before other destructors which may call mpp_buffer_put
and mpp_meta_put. So we mark finished flag after ~MppBufferService and
~MppMetaService is call and so not free corresponding data again.

This case usually happens when user call exit() directly.

Change-Id: I997c49b095e443b061fca230587b6216f710d31c
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2020-10-20 09:08:59 +08:00
Shunqian Zheng
9464af395b [misc]: Terminate soc_name to fix out of bounds
1. Terminate soc_name string to fix memory out of bounds
2. Fix all snprintf/strnlen warning

Change-Id: I4525c6e289a00d1509bc30ee69545d92f2f4b9cb
Signed-off-by: Shunqian Zheng <zhengsq@rock-chips.com>
2020-04-29 16:06:47 +08:00
Herman Chen
6a76bfc3f5 [mpp_buffer]: Add offset property
1. Add offset set / get function to MppBuffer
2. Add U32 register address converstion function.

Change-Id: Id297b7a05e47d4e249f5e33c1924a0539729c808
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2020-03-20 17:41:32 +08:00
Herman Chen
66ff6456b2 [mpp_dec]: Optimize mpp_dec condition wait
Optimize mpp_dec parser thread wait mechanism to reduce cpu overload.

1. Add mpp signal notify flag
2. Add mpp_dec wait status flag
3. Compare the notify flag with wait status flag. When there wait
condition is fulfilled then signal parser thread to process.

This will greatly reduce cpu overload by block wake up with no sense.

Change-Id: I38da718e80d0487e0300e807bc87cdb1aa070471
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2018-07-27 14:24:58 +08:00
Herman Chen
ee08efc836 [mpp_buffer]: Print mpp_buffer_group_dump caller
Change-Id: I7c1dcd74d35d185e48d0ec0b6309fcdacc8031f3
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2018-07-06 17:41:03 +08:00
Herman Chen
0ce7deaf79 [mpp_buffer]: Fix error printf on exit
Fix MppBufferService dump print error on buffer type. The v4l2 type has
changed to external dma-buf type.

Change-Id: I02c9e2741117efc6e9d84d239a26a28dde3471d4
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2018-07-06 17:29:02 +08:00
Herman Chen
31c657e1dc [mpp_buffer]: Signal codec thread on buffer create
When mpp codec thread go into idle status for lack of buffer new buffer
commit or create should wake up the codec thread to check again.

Change-Id: I843f7c790e1f8b8dcd67e209077f2475c8e265c8
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2018-06-28 16:27:48 +08:00
Rimon Xu
fb73f23f53 [alloctor]: add flags for alloctor
Each of the different alloctor has different alloctor modes,
such as allocating physical continuous memory, secure memory,
etc.

Change-Id: Ib032689f0cfd36b494843dcc176a22c6c9587b6a
Signed-off-by: Rimon Xu <rimon.xu@rock-chips.com>
2018-05-07 17:34:34 +08:00
Herman Chen
4231398479 [mpp_buffer]: Add more log operation
Add log record for mpp_buffer_group_reset and mpp_buffer discard.
Add log when normal group became orphan group.

Change-Id: I08127efae9f9587693c012816aa4e48de50a61c4
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2018-01-03 09:04:23 +08:00
Herman Chen
0b71be06ee [mpp_buffer]: Fix mpp_buffer_test crash
1. mpp_buffer_test will crash on legacy buffer non-released. It is
fixed now.
2. Release misc buffer group if it is empty.

Change-Id: Ib8eae910b0167c952d0555389ad65db82a2dbbbf
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2017-12-18 15:15:07 +08:00
Herman Chen
68d22d8fec [base]: Disable default print on exit
Use finalizing flag to disable print on MppBufferService destroy.

Change-Id: I8f17a6b8ed77101cf4f240dad05f8e886968c3c6
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2017-10-10 14:19:15 +08:00
Herman Chen
10676cee87 [base]: Remove misc buffer group creation
1. Do NOT create misc group on library loading.
2. Only create misc group on required.
3. Support both ion and drm now.

Change-Id: I7479f06e8ba6b5568bca5e2173efaa06cef70597
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2017-10-10 14:18:37 +08:00
Randy Li
83a41062a8 [mpp_buffer]: fix compiler warnings
Change-Id: Iedc60e981dc5bee3d49a779c34d693998ad3499b
Signed-off-by: Randy Li <randy.li@rock-chips.com>
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2017-03-24 12:28:51 +08:00
Herman Chen
249f83f35b [mpp_buffer]: Add caller to MppBuffer functions
Add caller parameter to all mpp_buffer functions.

Change-Id: Ibebd2a31b302988fe1ed480de575189ce57e41a5
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2016-12-15 16:56:39 +08:00
Herman Chen
447bb9e951 [jpegd]: Fix jpeg decoder MppBuffer crash
1. Fix jpeg decoder error on release.
2. Fix possible crash when release invalid MppBuffer handle.

Change-Id: Ie904192af3352b5f967dcea6371bdb9aff194089
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2016-12-13 16:05:59 +08:00
Herman Chen
1d12407883 [mpp_buffer]: Fix handwriting error
Change-Id: I6dd3bb986d4c35fd6255b1eec2617569d2e7ba70
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2016-12-09 16:10:46 +08:00
Lin Kesheng
60373a6973 [all]: format code
use fromdos to change file type, remove ^M in code.

Change-Id: I000202dc51fcff57cc0771455baebea595115b1d
Signed-off-by: Lin Kesheng <lks@rock-chips.com>
2016-09-08 15:21:02 +08:00