120 lines
4.0 KiB
C
120 lines
4.0 KiB
C
/*******************************************************************************************
|
|
# Copyright (c) 2023~2024 Quaming Intelligent Technology Co., Ltd.
|
|
# All Rights Reserved.
|
|
# Confidential and Proprietary - Quaming Intelligent Technology Co., Ltd.
|
|
#*******************************************************************************************/
|
|
#ifndef __QUA_MM_AV_EXT_H__
|
|
#define __QUA_MM_AV_EXT_H__
|
|
|
|
#include "common/qua_mm_common.h"
|
|
#include "avext/common/qua_mm_metaformat.h"
|
|
|
|
#define QUA_MM_EXT_EXTRACTOR "ext.extractor"
|
|
#define QUA_MM_EXT_MUXER "ext.muxer"
|
|
#define QUA_MM_EXT_DECODER "ext.decoder"
|
|
#define QUA_MM_EXT_ENCODER "ext.encoder"
|
|
|
|
typedef enum {
|
|
QUA_EXT_URL_SOURCE,
|
|
QUA_EXT_FD_SOURCE
|
|
} qua_ext_source_type_t;
|
|
|
|
typedef struct qua_mm_ext_module_t {
|
|
struct qua_mm_module_t parent;
|
|
qua_metaformat_t* (*create_meta_format)(QUA_CHAR* name);
|
|
QUA_S32 (*delete_meta_format)(qua_metaformat_t* meta_format);
|
|
} qua_mm_ext_module_t;
|
|
|
|
typedef struct qua_ext_muxer_chn_attr {
|
|
qua_output_format_t format;
|
|
QUA_CHAR file[1024];
|
|
} qua_ext_muxer_chn_attr_t;
|
|
|
|
typedef struct qua_ext_codec_chn_attr {
|
|
QUA_CONST_CHAR* mimetype;
|
|
QUA_VOID* mime_extra;
|
|
QUA_VOID* param;
|
|
} qua_ext_codec_chn_attr_t;
|
|
|
|
typedef struct qua_ext_chn_attr {
|
|
qua_ext_source_type_t source_type;
|
|
union {
|
|
QUA_VOID_PTR url;
|
|
QUA_S32 fd;
|
|
};
|
|
} qua_ext_chn_attr_t;
|
|
|
|
typedef struct qua_mm_extractor_device_t {
|
|
struct qua_mm_device_t parent;
|
|
|
|
} qua_mm_extractor_device_t;
|
|
|
|
typedef struct qua_mm_extractor_channel {
|
|
struct qua_mm_channel_t parent;
|
|
QUA_VOID* extractor;
|
|
|
|
QUA_SIZE_T (*track_count)(QUA_VOID* ex);
|
|
QUA_S32 (*get_audio_track_index)(QUA_VOID* ex);
|
|
QUA_S32 (*get_video_track_index)(QUA_VOID* ex);
|
|
QUA_S32 (*meta_data)(QUA_VOID* ex, qua_metaformat_t** meta);
|
|
QUA_S32 (*track_meta_data)(QUA_VOID* ex, QUA_SIZE_T track_index, qua_metaformat_t** track_meta);
|
|
QUA_SSIZE_T (*read_sample_data)(QUA_VOID* ex, QUA_SIZE_T track_index, qua_packet_t* packet);
|
|
QUA_S32 (*seek)(QUA_VOID* ex, QUA_U64 time_us, seek_mode_t mode);
|
|
QUA_BOOL (*advance)(QUA_VOID* ex);
|
|
} qua_mm_extractor_channel_t;
|
|
|
|
typedef struct qua_mm_muxer_device {
|
|
struct qua_mm_device_t parent;
|
|
|
|
} qua_mm_muxer_device_t;
|
|
|
|
typedef struct qua_mm_muxer_channel {
|
|
struct qua_mm_channel_t parent;
|
|
QUA_VOID* muxer;
|
|
|
|
QUA_S32 (*track_meta_data)(QUA_VOID* mux, qua_mediastream_type_t stream_type, qua_metaformat_t* track_meta);
|
|
QUA_S32 (*start)(QUA_VOID* mux);
|
|
QUA_S32 (*write_packet)(QUA_VOID* mux, qua_mediastream_type_t stream_type, qua_packet_t* packet);
|
|
QUA_S32 (*set_param)(QUA_VOID* mux, QUA_S32 key, QUA_VOID_PTR param);
|
|
QUA_S32 (*get_param)(QUA_VOID* mux, QUA_S32 key, QUA_VOID_PTR param);
|
|
QUA_S32 (*stop)(QUA_VOID* mux);
|
|
} qua_mm_muxer_channel_t;
|
|
|
|
typedef struct qua_mm_decoder_device_t {
|
|
struct qua_mm_device_t parent;
|
|
|
|
} qua_mm_decoder_device_t;
|
|
|
|
typedef struct qua_mm_decoder_channel {
|
|
struct qua_mm_channel_t parent;
|
|
QUA_VOID* decoder;
|
|
|
|
QUA_S32 (*start)(QUA_VOID* dec);
|
|
QUA_S32 (*send_packet)(QUA_VOID* dec, qua_packet_t* packet);
|
|
QUA_S32 (*receive_frame)(QUA_VOID* dec, QUA_VOID* frame);
|
|
QUA_S32 (*query)(QUA_VOID* dec);
|
|
QUA_S32 (*flush)(QUA_VOID* dec);
|
|
QUA_S32 (*stop)(QUA_VOID* dec);
|
|
QUA_S32 (*set_param)(QUA_VOID* dec, const QUA_CHAR *key, QUA_VOID_PTR param);
|
|
QUA_S32 (*get_param)(QUA_VOID* dec, const QUA_CHAR *key, QUA_VOID_PTR param);
|
|
} qua_mm_decoder_channel_t;
|
|
|
|
typedef struct qua_mm_encoder_device {
|
|
struct qua_mm_device_t parent;
|
|
|
|
} qua_mm_encoder_device_t;
|
|
|
|
typedef struct qua_mm_encoder_channel {
|
|
struct qua_mm_channel_t parent;
|
|
QUA_VOID* encoder;
|
|
|
|
QUA_S32 (*start)(QUA_VOID* enc);
|
|
QUA_S32 (*send_frame)(QUA_VOID* enc, QUA_VOID* frame);
|
|
QUA_S32 (*receive_packet)(QUA_VOID* enc, qua_packet_t* packet);
|
|
QUA_S32 (*query)(QUA_VOID* enc);
|
|
QUA_S32 (*flush)(QUA_VOID* enc);
|
|
QUA_S32 (*stop)(QUA_VOID* enc);
|
|
} qua_mm_encoder_channel_t;
|
|
|
|
#endif // __QUA_MM_AV_EXT_H__
|