| /* |
| * Copyright (C) 2014 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef ANDROID_AUDIO_FORMAT_H |
| #define ANDROID_AUDIO_FORMAT_H |
| |
| #include <stdint.h> |
| #include <sys/cdefs.h> |
| #include <system/audio.h> |
| |
| /** \cond */ |
| __BEGIN_DECLS |
| /** \endcond */ |
| |
| /** |
| * Copy buffers with conversion between buffer sample formats. |
| * |
| * \param dst Destination buffer |
| * \param dst_format Destination buffer format |
| * \param src Source buffer |
| * \param src_format Source buffer format |
| * \param count Number of samples to copy |
| * |
| * Allowed format conversions are given by either case 1 or 2 below: |
| * |
| * 1) One of src_format or dst_format is AUDIO_FORMAT_PCM_16_BIT or |
| * AUDIO_FORMAT_PCM_FLOAT, and the other format type is one of: |
| * |
| * AUDIO_FORMAT_PCM_16_BIT |
| * <BR> |
| * AUDIO_FORMAT_PCM_FLOAT |
| * <BR> |
| * AUDIO_FORMAT_PCM_8_BIT |
| * <BR> |
| * AUDIO_FORMAT_PCM_24_BIT_PACKED |
| * <BR> |
| * AUDIO_FORMAT_PCM_32_BIT |
| * <BR> |
| * AUDIO_FORMAT_PCM_8_24_BIT |
| * |
| * 2) Both dst_format and src_format are identical and of the list given |
| * in (1). This is a straight copy. |
| * |
| * The destination and source buffers must be completely separate if the destination |
| * format size is larger than the source format size. These routines call functions |
| * in primitives.h, so descriptions of detailed behavior can be reviewed there. |
| * |
| * Logs a fatal error if dst or src format is not allowed by the conversion rules above. |
| */ |
| void memcpy_by_audio_format(void *dst, audio_format_t dst_format, |
| const void *src, audio_format_t src_format, size_t count); |
| |
| |
| /** |
| * This function creates an index array for converting audio data with different |
| * channel position and index masks, used by memcpy_by_index_array(). |
| * |
| * Note that idxary is a caller allocated array |
| * of at least as many channels as present in the dst_mask. |
| * |
| * Parameters: |
| * \param idxary Updated array of indices of channels in the src frame for the dst frame |
| * \param arysize Number of caller allocated elements in idxary |
| * \param dst_channel_mask Bit mask corresponding to destination channels present |
| * \param src_channel_mask Bit mask corresponding to source channels present |
| * |
| * \return the number of array elements required. |
| * This may be greater than idxcount, so the return value should be checked |
| * if idxary size is less than 32. Returns zero if the input masks are unrecognized. |
| */ |
| size_t memcpy_by_index_array_initialization_from_channel_mask(int8_t *idxary, size_t arysize, |
| audio_channel_mask_t dst_channel_mask, audio_channel_mask_t src_channel_mask); |
| |
| /** \cond */ |
| __END_DECLS |
| /** \endcond */ |
| |
| #endif // ANDROID_AUDIO_FORMAT_H |