mirror of
https://gitee.com/Vancouver2017/luban-lite-t3e-pro.git
synced 2025-12-15 02:48:54 +00:00
141 lines
3.1 KiB
C
141 lines
3.1 KiB
C
/*
|
|
* Copyright (C) 2020-2023 ArtInChip Technology Co. Ltd
|
|
*
|
|
* author: <jun.ma@artinchip.com>
|
|
* Desc: aic_parser
|
|
*/
|
|
|
|
#ifndef __AIC_PARSER_H__
|
|
#define __AIC_PARSER_H__
|
|
|
|
#include "mpp_dec_type.h"
|
|
#include "aic_audio_decoder.h"
|
|
#include "aic_stream.h"
|
|
#include "mpp_log.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif /* __cplusplus */
|
|
|
|
enum aic_parser_type {
|
|
PARSER_TYPE_UNKNOW = -1,
|
|
PARSER_TYPE_MOV,
|
|
PARSER_TYPE_RAW,
|
|
PARSER_TYPE_AVI,
|
|
};
|
|
|
|
enum aic_parser_stream_type {
|
|
MPP_MEDIA_TYPE_UNKNOWN,
|
|
MPP_MEDIA_TYPE_VIDEO,
|
|
MPP_MEDIA_TYPE_AUDIO,
|
|
MPP_MEDIA_TYPE_OTHER
|
|
};
|
|
|
|
enum parse_status {
|
|
PARSER_ERROR = -1,
|
|
PARSER_OK = 0,
|
|
PARSER_EOS = 1,
|
|
PARSER_NOMEM = 2,
|
|
PARSER_NODATA = 3,
|
|
PARSER_INVALIDDATA = 4,
|
|
PARSER_INVALIDPARAM = 5,
|
|
};
|
|
|
|
#define PACKET_EOS (1)
|
|
#define TIME_BASE 1000000LL
|
|
#define MPP_MAX(a, b) ((a)>(b)? (a) : (b))
|
|
#define MPP_MIN(a, b) ((a)<(b)? (a) : (b))
|
|
|
|
struct aic_parser_packet {
|
|
enum aic_parser_stream_type type;
|
|
void *data;
|
|
s32 size;
|
|
s64 pts;
|
|
u32 flag;
|
|
};
|
|
|
|
struct aic_parser_video_stream {
|
|
enum mpp_codec_type codec_type;
|
|
s32 width;
|
|
s32 height;
|
|
s32 extra_data_size;
|
|
u8 *extra_data;
|
|
};
|
|
|
|
struct aic_parser_audio_stream {
|
|
enum aic_audio_codec_type codec_type;
|
|
s32 nb_channel;
|
|
s32 bits_per_sample;
|
|
s32 sample_rate;
|
|
s32 extra_data_size;
|
|
u8 *extra_data;
|
|
};
|
|
|
|
struct aic_parser_av_media_info {
|
|
s64 file_size;
|
|
s64 duration;
|
|
u8 has_video;
|
|
u8 has_audio;
|
|
u8 seek_able;
|
|
struct aic_parser_video_stream video_stream;
|
|
struct aic_parser_audio_stream audio_stream;
|
|
};
|
|
|
|
struct aic_parser {
|
|
/* destroy the parser*/
|
|
s32 (*destroy)(struct aic_parser *parser);
|
|
|
|
/**
|
|
* peek - get the next packet infomation from parser
|
|
*
|
|
* return: enum parse_status
|
|
*/
|
|
s32 (*peek)(struct aic_parser *parser, struct aic_parser_packet *packet); /*just see packet info*/
|
|
|
|
/* read the packet data */
|
|
s32 (*read)(struct aic_parser *parser, struct aic_parser_packet *packet); /* */
|
|
|
|
/* get media info of audio and video */
|
|
s32 (*get_media_info)(struct aic_parser *parser, struct aic_parser_av_media_info *info);
|
|
|
|
/* seek */
|
|
s32 (*seek)(struct aic_parser *parser, s64 time); //unit:us
|
|
|
|
/* init, parse file header */
|
|
s32 (*init)(struct aic_parser *parser);
|
|
};
|
|
|
|
#define aic_parser_destroy(parser)\
|
|
((struct aic_parser*)parser)->destroy(parser)
|
|
|
|
#define aic_parser_peek( \
|
|
parser, \
|
|
packet) \
|
|
((struct aic_parser*)parser)->peek(parser,packet)
|
|
|
|
#define aic_parser_read( \
|
|
parser, \
|
|
packet) \
|
|
((struct aic_parser*)parser)->read(parser,packet)
|
|
|
|
#define aic_parser_seek( \
|
|
parser, \
|
|
time) \
|
|
((struct aic_parser*)parser)->seek(parser,time)
|
|
|
|
#define aic_parser_get_media_info( \
|
|
parser, \
|
|
media_info) \
|
|
((struct aic_parser*)parser)->get_media_info(parser,media_info)
|
|
|
|
#define aic_parser_init( \
|
|
parser) \
|
|
((struct aic_parser*)parser)->init(parser)
|
|
|
|
s32 aic_parser_create(unsigned char *uri, struct aic_parser **parser);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* End of #ifdef __cplusplus */
|
|
#endif
|