[Android] [PATCH 4/4] android: add native AudioTrack aout module

某因幡 tewilove at gmail.com
Fri Mar 9 07:51:53 CET 2012


Again.

2012/3/9 Rafaël Carré <funman at videolan.org>:
> Le 2012-03-08 22:27, 某因幡 a écrit :
>> Inline.
>>
>> 2012/3/8 Jean-Baptiste Kempf <jb at videolan.org>:
>
>>>> +static AudioSystem_getOutputFrameCount as_getOutputFrameCount = NULL;
>>>> +static AudioSystem_getOutputLatency as_getOutputLatency = NULL;
>>>> +static AudioSystem_getOutputSamplingRate as_getOutputSamplingRate = NULL;
>>>> +static AudioTrack_getMinFrameCount at_getMinFrameCount = NULL;
>>>> +static AudioTrack_ctor at_ctor = NULL;
>>>> +static AudioTrack_ctor_legacy at_ctor_legacy = NULL;
>>>> +static AudioTrack_dtor at_dtor = NULL;
>>>> +static AudioTrack_initCheck at_initCheck = NULL;
>>>> +static AudioTrack_start at_start = NULL;
>>>> +static AudioTrack_stop at_stop = NULL;
>>>> +static AudioTrack_write at_write = NULL;
>>>> +static AudioTrack_flush at_flush = NULL;
>>>
>>> Why static ?
>>>
>>
>> What's wrong?
>
> It's always weird to see process-wide variables when VLC is heavily
> multi-threaded, though I don't know if there can be several audio output
> objects in one process.
>
> androidsurface video output stores function pointers in the context for
> example.
>
>>>> +    audio_output_t *p_aout = (audio_output_t*)(p_this);
>>>> +    int status;
>>>> +    int afSampleRate, afFrameCount, afLatency, minBufCount, minFrameCount;
>>>> +    int type, channel, rate, format, size;
>>>> +
>>>
>>>> +    // AudioSystem::MUSIC = 3
>>>> +    type = 3;
>>>
>>> Please use a define for that.
>>>
>>>> +    // 4000 <= frequency <= 48000
>>>> +    if (p_aout->format.i_rate < 4000)
>>>> +        p_aout->format.i_rate = 4000;
>>>> +    if (p_aout->format.i_rate > 48000)
>>>> +        p_aout->format.i_rate = 48000;
>>>> +    rate = p_aout->format.i_rate;
>>>> +    p_sys->rate = rate;
>>>
>>> It cannot go above 48000?
>>>
>>
>> I should have seen such lines in Android source tree and did some test
>> about a year ago...
>> Now I see it seems to depends on hardware.
>>
>>>> +    // AudioSystem::PCM_16_BIT = 1
>>>> +    // AudioSystem::PCM_8_BIT = 2
>>>> +    format = (p_aout->format.i_format == VLC_CODEC_S16L) ? 1 : 2;
>>>
>>> As above.
>>>
>>>> +    p_sys->size = p_aout->format.i_bytes_per_frame;
>>>> +    // sizeof(AudioTrack) == 0x58 (not sure) on 2.2.1, this should be enough
>>>> +    p_sys->AudioTrack = malloc(256);
>>>
>>> What does the sourcecode of Cyanogen say?
>>>
>>
>> Not sure, but actually it works. I had a X10i with firmware Android
>> 1.6/2.1/2.3, unofficial 2.2 and CM 7.2. :p
>
> Yeah it will probably work for a long time if not forever.
>
> To be extra sure we could allocate a bit more and poison the last area
> with e.g. 0x42424242 and regularly check if this memory changed.
>
> Or require the C++ definition of this class and check for its size (not
> sure if it is doable at build time).
> _______________________________________________
> Android mailing list
> Android at videolan.org
> http://mailman.videolan.org/listinfo/android



-- 
language: Chinese, Japanese, English
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-android-add-native-AudioTrack-aout-module.patch
Type: text/x-patch
Size: 14059 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/android/attachments/20120309/2f69c178/attachment.bin>


More information about the Android mailing list