114 lines
3.6 KiB
C
114 lines
3.6 KiB
C
#ifndef FFMPEG_AUDIO_H
|
|
#define FFMPEG_AUDIO_H
|
|
|
|
#include <stdint.h>
|
|
|
|
#ifdef _WIN32
|
|
#ifdef LIB_COMPILE
|
|
#define FFMPEG_EXTERN __declspec(dllexport)
|
|
#else
|
|
#define FFMPEG_EXTERN __declspec(dllimport)
|
|
#endif
|
|
#else
|
|
#define FFMPEG_EXTERN
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*
|
|
* Audio-only Acinerella API.
|
|
*
|
|
* The implementation may be C++, but this header is plain C-compatible.
|
|
* All public structs below are opaque handles, except ac_audio_info.
|
|
*/
|
|
|
|
typedef struct __fmpg_instance__ fmpg_instance;
|
|
typedef struct __fmpg_decoder__ fmpg_decoder;
|
|
typedef struct __fmpg_package__ fmpg_package;
|
|
typedef struct __fmpg_file_info__ fmpg_file_info;
|
|
|
|
typedef struct __fmpg_audio_info__ {
|
|
int sample_rate;
|
|
int channels;
|
|
int bits_per_sample; /* Always 32. */
|
|
int bytes_per_sample; /* Always 4. */
|
|
} fmpg_audio_info;
|
|
|
|
/* Lifecycle */
|
|
FFMPEG_EXTERN fmpg_instance * ac_init(void);
|
|
FFMPEG_EXTERN void ac_free(fmpg_instance * instance);
|
|
|
|
FFMPEG_EXTERN int ac_open_file(fmpg_instance * instance, const char *filename);
|
|
FFMPEG_EXTERN void ac_close(fmpg_instance * instance);
|
|
FFMPEG_EXTERN int ac_is_open(fmpg_instance * instance);
|
|
|
|
/* Audio stream discovery */
|
|
FFMPEG_EXTERN int ac_get_audio_stream_count(fmpg_instance * instance);
|
|
FFMPEG_EXTERN int ac_get_default_audio_stream(fmpg_instance * instance);
|
|
FFMPEG_EXTERN int ac_get_audio_info(fmpg_instance * instance, int stream_index, fmpg_audio_info *info);
|
|
|
|
/* Metadata. The returned strings are owned by the instance. */
|
|
FFMPEG_EXTERN const fmpg_file_info * ac_get_file_info(fmpg_instance * instance);
|
|
|
|
FFMPEG_EXTERN const char * ac_file_info_title(const fmpg_file_info *info);
|
|
FFMPEG_EXTERN const char * ac_file_info_author(const fmpg_file_info *info);
|
|
FFMPEG_EXTERN const char * ac_file_info_album(const fmpg_file_info *info);
|
|
FFMPEG_EXTERN const char * ac_file_info_genre(const fmpg_file_info *info);
|
|
FFMPEG_EXTERN const char * ac_file_info_comment(const fmpg_file_info *info);
|
|
FFMPEG_EXTERN const char * ac_file_info_copyright(const fmpg_file_info *info);
|
|
|
|
FFMPEG_EXTERN int ac_file_info_year(const fmpg_file_info *info);
|
|
FFMPEG_EXTERN int ac_file_info_track(const fmpg_file_info *info);
|
|
FFMPEG_EXTERN int64_t ac_file_info_duration(const fmpg_file_info *info);
|
|
FFMPEG_EXTERN int ac_file_info_bitrate(const fmpg_file_info *info);
|
|
|
|
/* Packet reading */
|
|
FFMPEG_EXTERN fmpg_package * ac_read_package(fmpg_instance * instance);
|
|
FFMPEG_EXTERN void ac_free_package(fmpg_package * package);
|
|
FFMPEG_EXTERN int ac_package_stream_index(fmpg_package * package);
|
|
|
|
/* Decoder */
|
|
FFMPEG_EXTERN fmpg_decoder * ac_create_decoder(fmpg_instance * instance, int stream_index);
|
|
|
|
FFMPEG_EXTERN void ac_free_decoder(fmpg_decoder * decoder);
|
|
|
|
/*
|
|
* Decode one compressed packet.
|
|
*
|
|
* Returns 1 if PCM data was produced, 0 otherwise.
|
|
*
|
|
* Output format:
|
|
* signed 32-bit integer PCM
|
|
* interleaved
|
|
* native endian
|
|
*
|
|
* Example stereo layout:
|
|
* L0 R0 L1 R1 L2 R2 ...
|
|
*/
|
|
FFMPEG_EXTERN int ac_decode_package(fmpg_package * package, fmpg_decoder * decoder);
|
|
|
|
/*
|
|
* Flush delayed decoder/resampler samples after EOF.
|
|
*
|
|
* Call this repeatedly after ac_read_package() returns NULL,
|
|
* until it returns 0.
|
|
*/
|
|
FFMPEG_EXTERN int ac_flush_decoder(fmpg_decoder * decoder);
|
|
|
|
/* Seek to absolute position in milliseconds. */
|
|
FFMPEG_EXTERN int ac_seek_ms(fmpg_decoder * decoder, int64_t target_pos_ms);
|
|
|
|
/* Decoder output */
|
|
FFMPEG_EXTERN const uint8_t * ac_decoder_buffer(fmpg_decoder * decoder);
|
|
FFMPEG_EXTERN int ac_decoder_buffer_size(fmpg_decoder * decoder);
|
|
FFMPEG_EXTERN double ac_decoder_timecode(fmpg_decoder * decoder);
|
|
FFMPEG_EXTERN int ac_decoder_stream_index(fmpg_decoder * decoder);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|