summaryrefslogtreecommitdiff
path: root/include/kitchensink/kitsource.h
blob: b2fcfa6101691c4be36d053b98016cea768b7006 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#ifndef KITSOURCE_H
#define KITSOURCE_H

#include <inttypes.h>
#include "kitchensink/kitconfig.h"

#ifdef __cplusplus
extern "C" {
#endif

#define KIT_CODECNAMESIZE 32
#define KIT_CODECLONGNAMESIZE 128

typedef enum Kit_StreamType {
    KIT_STREAMTYPE_UNKNOWN, ///< Unknown stream type
    KIT_STREAMTYPE_VIDEO, ///< Video stream
    KIT_STREAMTYPE_AUDIO, ///< Audio stream
    KIT_STREAMTYPE_DATA, ///< Data stream
    KIT_STREAMTYPE_SUBTITLE, ///< Subtitle streawm
    KIT_STREAMTYPE_ATTACHMENT ///< Attachment stream (images, etc)
} Kit_StreamType;

typedef struct Kit_Source {
    int audio_stream_index;    ///< Audio stream index
    int video_stream_index;    ///< Video stream index
    int subtitle_stream_index; ///< Subtitle stream index
    void *format_ctx;          ///< FFmpeg: Videostream format context
    void *avio_ctx;            ///< FFmpeg: AVIO context
    uint8_t *avio_buf;   ///< Buffer for custom AVIO source
} Kit_Source;

typedef struct Kit_StreamInfo {
    int index; ///< Stream index
    Kit_StreamType type; ///< Stream type
} Kit_StreamInfo;

typedef int (*Kit_ReadCallback)(void*, uint8_t*, int);
typedef int64_t (*Kit_SeekCallback)(void*, int64_t, int);

KIT_API Kit_Source* Kit_CreateSourceFromUrl(const char *path);
KIT_API Kit_Source* Kit_CreateSourceFromCustom(Kit_ReadCallback read_cb, Kit_SeekCallback seek_cb, void *userdata);
KIT_API void Kit_CloseSource(Kit_Source *src);

KIT_API int Kit_GetSourceStreamInfo(const Kit_Source *src, Kit_StreamInfo *info, int index);
KIT_API int Kit_GetSourceStreamCount(const Kit_Source *src);
KIT_API int Kit_GetBestSourceStream(const Kit_Source *src, const Kit_StreamType type);
KIT_API int Kit_SetSourceStream(Kit_Source *src, const Kit_StreamType type, int index);
KIT_API int Kit_GetSourceStream(const Kit_Source *src, const Kit_StreamType type);

#ifdef __cplusplus
}
#endif

#endif // KITSOURCE_H