1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright (c) 2022 Rockchip, Inc. All Rights Reserved. 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Licensed under the Apache License, Version 2.0 (the "License"); 5*4882a593Smuzhiyun * you may not use this file except in compliance with the License. 6*4882a593Smuzhiyun * You may obtain a copy of the License at 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * http://www.apache.org/licenses/LICENSE-2.0 9*4882a593Smuzhiyun * 10*4882a593Smuzhiyun * Unless required by applicable law or agreed to in writing, software 11*4882a593Smuzhiyun * distributed under the License is distributed on an "AS IS" BASIS, 12*4882a593Smuzhiyun * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*4882a593Smuzhiyun * See the License for the specific language governing permissions and 14*4882a593Smuzhiyun * limitations under the License. 15*4882a593Smuzhiyun */ 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun #ifndef __RKDEMUXER_H__ 18*4882a593Smuzhiyun #define __RKDEMUXER_H__ 19*4882a593Smuzhiyun #ifdef __cplusplus 20*4882a593Smuzhiyun extern "C" { 21*4882a593Smuzhiyun #endif 22*4882a593Smuzhiyun #include <stdint.h> 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun #define DEMUXER_VIDEO_YUV420SP_10BIT 0 25*4882a593Smuzhiyun #define DEMUXER_VIDEO_YUV420SP 1 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun typedef struct _RKDEMUXER_READ_PACKET_CALLBACK_S { 28*4882a593Smuzhiyun void (*read_video_packet)(void *); 29*4882a593Smuzhiyun void (*read_audio_packet)(void *); 30*4882a593Smuzhiyun } RKDEMUXER_READ_PACKET_CALLBACK_S; 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun typedef struct StDemuxerInput{ 33*4882a593Smuzhiyun void *ptr; 34*4882a593Smuzhiyun int8_t s8ReadModeFlag; 35*4882a593Smuzhiyun int8_t s8VideoEnableFlag; 36*4882a593Smuzhiyun int8_t s8AudioEnableFlag; 37*4882a593Smuzhiyun } DemuxerInput; 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun typedef struct StDemuxerParam{ 40*4882a593Smuzhiyun int32_t s32TotalTime; 41*4882a593Smuzhiyun int8_t *pVideoCodec; 42*4882a593Smuzhiyun int32_t s32VideoWidth; 43*4882a593Smuzhiyun int32_t s32VideoHeigh; 44*4882a593Smuzhiyun int8_t s8VideoFormat; 45*4882a593Smuzhiyun int32_t s32VideoAvgFrameRate; 46*4882a593Smuzhiyun int32_t s32VideoTimeBaseNum; 47*4882a593Smuzhiyun int32_t s32VideoTimeBaseDen; 48*4882a593Smuzhiyun int64_t s64VideoFirstPTS; 49*4882a593Smuzhiyun int8_t *pAudioCodec; 50*4882a593Smuzhiyun int32_t s32AudioChannels; 51*4882a593Smuzhiyun int32_t s32AudioSampleRate; 52*4882a593Smuzhiyun int8_t s8AudioFormat; 53*4882a593Smuzhiyun int64_t s64AudioFirstPTS; 54*4882a593Smuzhiyun int32_t s32AudioTimeBaseNum; 55*4882a593Smuzhiyun int32_t s32AudioTimeBaseDen; 56*4882a593Smuzhiyun RKDEMUXER_READ_PACKET_CALLBACK_S pstReadPacketCallback; 57*4882a593Smuzhiyun } DemuxerParam; 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun typedef struct StDemuxerPacket{ 60*4882a593Smuzhiyun void *ptr; 61*4882a593Smuzhiyun int8_t s8EofFlag; 62*4882a593Smuzhiyun int8_t s8SpecialFlag; 63*4882a593Smuzhiyun int8_t *s8PacketData; 64*4882a593Smuzhiyun int32_t s32PacketSize; 65*4882a593Smuzhiyun int32_t s32Series; 66*4882a593Smuzhiyun int64_t s64Pts; 67*4882a593Smuzhiyun int64_t s64Duration; 68*4882a593Smuzhiyun int64_t s64Pos; 69*4882a593Smuzhiyun } DemuxerPacket; 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun int rkdemuxer_init(void **demuxer_cfg, DemuxerInput *ptr); 72*4882a593Smuzhiyun void rkdemuxer_deinit(void **demuxer_cfg); 73*4882a593Smuzhiyun int rkdemuxer_get_param(void *demuxer_cfg, const char *input_name, DemuxerParam *ptr); 74*4882a593Smuzhiyun int rkdemuxer_read_packet_start(void *demuxer_cfg, int64_t startPts); 75*4882a593Smuzhiyun int rkdemuxer_read_packet_stop(void *demuxer_cfg); 76*4882a593Smuzhiyun int rkdemuxer_read_one_video_packet(void *demuxer_cfg, DemuxerPacket *output_packet); 77*4882a593Smuzhiyun int rkdemuxer_read_one_audio_packet(void *demuxer_cfg, DemuxerPacket *output_packet); 78*4882a593Smuzhiyun int rkdemuxer_read_video_duration(void *demuxer_cfg, int64_t *duration); 79*4882a593Smuzhiyun int rkdemuxer_read_audio_duration(void *demuxer_cfg, int64_t *duration); 80*4882a593Smuzhiyun int rkdemuxer_seek_video_pts(void *demuxer_cfg, int64_t seekPts); 81*4882a593Smuzhiyun int rkdemuxer_seet_audio_pts(void *demuxer_cfg, int64_t seekPts); 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun #ifdef __cplusplus 84*4882a593Smuzhiyun } 85*4882a593Smuzhiyun #endif 86*4882a593Smuzhiyun #endif 87