Android buffer_handle_t的定义(转载)

本文详细介绍了C++中native_handle_t和buffer_handle_t的定义、作用以及应用场景,包括它们在系统核心库中的位置和使用方式。通过实例解析,帮助读者理解并掌握这两个关键数据类型的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://www.cnblogs.com/eustoma/archive/2012/06/08/2541416.html

1. buffer_handle_t

文件位置:system\core\include\system\window.h

typedef const native_handle_t* buffer_handle_t;

2. native_handle_t

文件位置:system\core\include\cutils\native_handle.h

typedef struct native_handle
{
    int version;        /* sizeof(native_handle_t) */
    int numFds;       /* number of file-descriptors at &data[0] */
    int numInts;      /* number of ints at &data[numFds] */
    int data[0];        /* numFds + numInts ints */
} native_handle_t;

转载于:https://www.cnblogs.com/lance-ehf/p/3746202.html

这段代码什么意思: audio_io_handle_t AudioPolicyManager::selectOutputForMusicEffects() 3567 { 3568 // select one output among several suitable for global effects. 3569 // The priority is as follows: 3570 // 1: An offloaded output. If the effect ends up not being offloadable, 3571 // AudioFlinger will invalidate the track and the offloaded output 3572 // will be closed causing the effect to be moved to a PCM output. 3573 // 2: A deep buffer output 3574 // 3: The primary output 3575 // 4: the first output in the list 3576 3577 DeviceVector devices = mEngine->getOutputDevicesForAttributes( 3578 attributes_initializer(AUDIO_USAGE_MEDIA), nullptr, false /*fromCache*/); 3579 SortedVector<audio_io_handle_t> outputs = getOutputsForDevices(devices, mOutputs); 3580 3581 if (outputs.size() == 0) { 3582 return AUDIO_IO_HANDLE_NONE; 3583 } 3584 3585 audio_io_handle_t output = AUDIO_IO_HANDLE_NONE; 3586 bool activeOnly = true; 3587 3588 while (output == AUDIO_IO_HANDLE_NONE) { 3589 audio_io_handle_t outputOffloaded = AUDIO_IO_HANDLE_NONE; 3590 audio_io_handle_t outputDeepBuffer = AUDIO_IO_HANDLE_NONE; 3591 audio_io_handle_t outputPrimary = AUDIO_IO_HANDLE_NONE; 3592 #ifdef OPLUS_FEATURE_GAME_AUDIO_EFFECTS 3593 // Chuancheng.Dong@MULTIMEDIA.AUDIOSERVER.FRAMEWORK, 2022/07/14, support music effects for fast output 3594 audio_io_handle_t outputFast = AUDIO_IO_HANDLE_NONE; 3595 #endif /* OPLUS_FEATURE_GAME_AUDIO_EFFECTS */ 3596 3597 for (audio_io_handle_t output : outputs) { 3598 sp<SwAudioOutputDescriptor> desc = mOutputs.valueFor(output); 3599 if (activeOnly && !desc->isActive(toVolumeSource(AUDIO_STREAM_MUSIC))) { 3600 continue; 3601 } 3602 ALOGV("selectOutputForMusicEffects activeOnly %d output %d flags 0x%08x", 3603 activeOnly, output, desc->mFlags); 3604 if ((desc->mFlags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) != 0) { 3605 outputOffloaded = output; 3606 } 3607 if ((desc->mFlags & AUDIO_OUTPUT_FLAG_DEEP_BUFFER) != 0) { 3608 outputDeepBuffer = output; 3609 } 3610 if ((desc->mFlags & AUDIO_OUTPUT_FLAG_PRIMARY) != 0) { 3611 outputPrimary = output; 3612 } 3613 #ifdef OPLUS_FEATURE_GAME_AUDIO_EFFECTS 3614 // Chuancheng.Dong@MULTIMEDIA.AUDIOSERVER.FRAMEWORK, 2022/07/14, support music effects for fast output 3615 if (((desc->mFlags & AUDIO_OUTPUT_FLAG_FAST) != 0) 3616 && ((desc->mFlags & AUDIO_OUTPUT_FLAG_PRIMARY) == 0)) { 3617 outputFast = output; 3618 } 3619 #endif /* OPLUS_FEATURE_GAME_AUDIO_EFFECTS */ 3620 } 3621 if (outputOffloaded != AUDIO_IO_HANDLE_NONE) { 3622 output = outputOffloaded; 3623 } else if (outputDeepBuffer != AUDIO_IO_HANDLE_NONE) { 3624 output = outputDeepBuffer; 3625 } else if (outputPrimary != AUDIO_IO_HANDLE_NONE) { 3626 output = outputPrimary; 3627 #ifdef OPLUS_FEATURE_GAME_AUDIO_EFFECTS 3628 // Chuancheng.Dong@MULTIMEDIA.AUDIOSERVER.FRAMEWORK, 2022/07/14, support music effects for fast output 3629 } else if (outputFast != AUDIO_IO_HANDLE_NONE) { 3630 output = outputFast; 3631 #endif /* OPLUS_FEATURE_GAME_AUDIO_EFFECTS */ 3632 } else { 3633 output = outputs[0]; 3634 } 3635 activeOnly = false; 3636 } 3637 3638 #ifdef OPLUS_FEATURE_GAME_AUDIO_EFFECTS 3639 // Chuancheng.Dong@MULTIMEDIA.AUDIOSERVER.FRAMEWORK, 2020/06/06, Add for music effects moving policy 3640 mAudioPolicyManagerExt->oplusSelectOutputForMusicEffects(output, mMusicEffectOutput, mOutputs, outputs, mEffects);
最新发布
08-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值