android_audiotrack.h 3.8 KB
Newer Older
Z
Zhang Rui 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/*****************************************************************************
 * ijksdl_android_audiotrack.h
 *****************************************************************************
 *
 * copyright (c) 2013 Zhang Rui <bbcallen@gmail.com>
 *
 * This file is part of ijkPlayer.
 *
 * ijkPlayer is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * ijkPlayer is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with ijkPlayer; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */

24 25
#ifndef IJKSDL_ANDROID__IJKSDL_ANDROID_AUDIOTRACK_H
#define IJKSDL_ANDROID__IJKSDL_ANDROID_AUDIOTRACK_H
Z
Zhang Rui 已提交
26 27 28

#include <stdint.h>
#include <jni.h>
Z
Zhang Rui 已提交
29 30
#include "../ijksdl_audio.h"
#include "../ijksdl_aout.h"
Z
Zhang Rui 已提交
31 32 33 34 35 36 37 38 39 40 41 42 43 44

typedef struct SDL_AndroidAudioTrack_Spec {
    enum StreamType {
        STREAM_VOICE_CALL = 0,
        STREAM_SYSTEM = 1,
        STREAM_RING = 2,
        STREAM_MUSIC = 3,
        STREAM_ALARM = 4,
        STREAM_NOTIFICATION = 5,
    } stream_type;

    int sample_rate_in_hz;

    enum ChannelConfig {
45
        CHANNEL_OUT_INVALID = 0x0,
Z
Zhang Rui 已提交
46 47 48
        CHANNEL_OUT_DEFAULT = 0x1, /* f-l */
        CHANNEL_OUT_MONO = 0x4, /* f-l, f-r */
        CHANNEL_OUT_STEREO = 0xc, /* f-l, f-r, b-l, b-r */
49
        CHANNEL_OUT_QUAD = 0xcc, /* f-l, f-r, b-l, b-r */
Z
Zhang Rui 已提交
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
        CHANNEL_OUT_SURROUND = 0x41c, /* f-l, f-r, f-c, b-c */
        CHANNEL_OUT_5POINT1 = 0xfc, /* f-l, f-r, b-l, b-r, f-c, low */
        CHANNEL_OUT_7POINT1 = 0x3fc, /* f-l, f-r, b-l, b-r, f-c, low, f-lc, f-rc */

        CHANNEL_OUT_FRONT_LEFT = 0x4,
        CHANNEL_OUT_FRONT_RIGHT = 0x8,
        CHANNEL_OUT_BACK_LEFT = 0x40,
        CHANNEL_OUT_BACK_RIGHT = 0x80,
        CHANNEL_OUT_FRONT_CENTER = 0x10,
        CHANNEL_OUT_LOW_FREQUENCY = 0x20,
        CHANNEL_OUT_FRONT_LEFT_OF_CENTER = 0x100,
        CHANNEL_OUT_FRONT_RIGHT_OF_CENTER = 0x200,
        CHANNEL_OUT_BACK_CENTER = 0x400,
    } channel_config;

    enum AudioFormat {
        ENCODING_INVALID = 0,
        ENCODING_DEFAULT = 1,
68 69
        ENCODING_PCM_16BIT = 2, // signed, guaranteed to be supported by devices.
        ENCODING_PCM_8BIT = 3, // unsigned, not guaranteed to be supported by devices.
Z
Zhang Rui 已提交
70 71 72 73 74 75 76
    } audio_format;
    int buffer_size_in_bytes;

    enum Mode {
        MODE_STATIC = 0,
        MODE_STREAM = 1,
    } mode;
77 78 79

    // extra field
    int sdl_samples;
Z
Zhang Rui 已提交
80 81 82 83 84 85
} SDL_AndroidAudioTrack_Spec;

typedef struct SDL_AndroidAudioTrack SDL_AndroidAudioTrack;

int sdl_audiotrack_global_init(JNIEnv *env);

86 87 88 89 90 91
SDL_AndroidAudioTrack *sdl_audiotrack_new_from_spec(JNIEnv *env, SDL_AndroidAudioTrack_Spec *spec);
SDL_AndroidAudioTrack *sdl_audiotrack_new_from_sdl_spec(JNIEnv *env, SDL_AudioSpec *sdl_spec);
void sdl_audiotrack_free(JNIEnv *env, SDL_AndroidAudioTrack* atrack);

void sdl_audiotrack_get_target_spec(SDL_AndroidAudioTrack* atrack, SDL_AudioSpec *spec);
int sdl_audiotrack_get_min_buffer_size(SDL_AndroidAudioTrack* atrack);
Z
Zhang Rui 已提交
92 93 94 95 96 97 98 99 100 101

void sdl_audiotrack_play(JNIEnv *env, SDL_AndroidAudioTrack *atrack);
void sdl_audiotrack_pause(JNIEnv *env, SDL_AndroidAudioTrack *atrack);
void sdl_audiotrack_flush(JNIEnv *env, SDL_AndroidAudioTrack *atrack);
void sdl_audiotrack_stop(JNIEnv *env, SDL_AndroidAudioTrack *atrack);
void sdl_audiotrack_release(JNIEnv *env, SDL_AndroidAudioTrack *atrack);
int sdl_audiotrack_reserve_buffer(JNIEnv *env, SDL_AndroidAudioTrack *atrack, int len);
int sdl_audiotrack_write_byte(JNIEnv *env, SDL_AndroidAudioTrack *atrack, uint8_t *data, int len);

#endif