/*
|
* Copyright (c) 2010-2019 Belledonne Communications SARL.
|
*
|
* This file is part of mediastreamer2.
|
*
|
* This program is free software: you can redistribute it and/or modify
|
* it under the terms of the GNU General Public License as published by
|
* the Free Software Foundation, either version 3 of the License, or
|
* (at your option) any later version.
|
*
|
* This program is distributed in the hope that it will be useful,
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* GNU General Public License for more details.
|
*
|
* You should have received a copy of the GNU General Public License
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
*/
|
|
#ifndef msinterfaces_h
|
#define msinterfaces_h
|
|
#include "mediastreamer2/mscodecutils.h"
|
|
typedef struct _MSVideoCodecSLI MSVideoCodecSLI;
|
|
struct _MSVideoCodecSLI {
|
uint16_t first;
|
uint16_t number;
|
uint8_t picture_id;
|
};
|
|
typedef struct _MSVideoCodecRPSI MSVideoCodecRPSI;
|
|
struct _MSVideoCodecRPSI {
|
uint8_t *bit_string;
|
uint16_t bit_string_len;
|
};
|
|
typedef struct _MSVideoEncoderPixFmt MSVideoEncoderPixFmt;
|
|
struct _MSVideoEncoderPixFmt {
|
uint32_t pixfmt;
|
bool_t supported;
|
};
|
|
/**
|
* Interface definition for video display filters.
|
**/
|
|
typedef struct _MSVideoDisplayDecodingSupport MSVideoDisplayDecodingSupport;
|
|
struct _MSVideoDisplayDecodingSupport {
|
const char *mime_type; /**< Input parameter to asking if the display supports decoding of this mime type */
|
bool_t supported; /**< Output telling whether the display supports decoding to the specified mime type */
|
};
|
|
/** whether the video window should be resized to the stream's resolution*/
|
#define MS_VIDEO_DISPLAY_ENABLE_AUTOFIT \
|
MS_FILTER_METHOD(MSFilterVideoDisplayInterface,0,int)
|
|
/**position of the local view */
|
#define MS_VIDEO_DISPLAY_SET_LOCAL_VIEW_MODE \
|
MS_FILTER_METHOD(MSFilterVideoDisplayInterface,1,int)
|
|
/**whether the video should be reversed as in mirror */
|
#define MS_VIDEO_DISPLAY_ENABLE_MIRRORING \
|
MS_FILTER_METHOD(MSFilterVideoDisplayInterface,2,int)
|
|
/**returns a platform dependant window id where the video is drawn */
|
#define MS_VIDEO_DISPLAY_GET_NATIVE_WINDOW_ID \
|
MS_FILTER_METHOD(MSFilterVideoDisplayInterface,3,void*)
|
|
|
/**Sets an external native window id where the video is to be drawn */
|
#define MS_VIDEO_DISPLAY_SET_NATIVE_WINDOW_ID \
|
MS_FILTER_METHOD(MSFilterVideoDisplayInterface,4,void*)
|
|
|
/**scale factor of the local view */
|
#define MS_VIDEO_DISPLAY_SET_LOCAL_VIEW_SCALEFACTOR \
|
MS_FILTER_METHOD(MSFilterVideoDisplayInterface,5,float)
|
|
/**Set the background colour for video window */
|
#define MS_VIDEO_DISPLAY_SET_BACKGROUND_COLOR \
|
MS_FILTER_METHOD(MSFilterVideoDisplayInterface,8,int[3])
|
|
/**Show video. Useful to free XV port */
|
#define MS_VIDEO_DISPLAY_SHOW_VIDEO \
|
MS_FILTER_METHOD(MSFilterVideoDisplayInterface,9,int)
|
|
#define MS_VIDEO_DISPLAY_ZOOM \
|
MS_FILTER_METHOD(MSFilterVideoDisplayInterface,10,int[4])
|
|
/**Specifiy device orientation from portrait */
|
#define MS_VIDEO_DISPLAY_SET_DEVICE_ORIENTATION \
|
MS_FILTER_METHOD(MSFilterVideoDisplayInterface,11,int)
|
|
/**
|
* Interface definitions for players
|
**/
|
|
enum _MSPlayerState{
|
MSPlayerClosed,
|
MSPlayerPaused,
|
MSPlayerPlaying
|
};
|
|
typedef enum _MSPlayerState MSPlayerState;
|
|
/**open a media file*/
|
#define MS_PLAYER_OPEN \
|
MS_FILTER_METHOD(MSFilterPlayerInterface,0,const char )
|
|
#define MS_PLAYER_START \
|
MS_FILTER_METHOD_NO_ARG(MSFilterPlayerInterface,1)
|
|
#define MS_PLAYER_PAUSE \
|
MS_FILTER_METHOD_NO_ARG(MSFilterPlayerInterface,2)
|
|
#define MS_PLAYER_CLOSE \
|
MS_FILTER_METHOD_NO_ARG(MSFilterPlayerInterface,3)
|
|
#define MS_PLAYER_SEEK_MS \
|
MS_FILTER_METHOD(MSFilterPlayerInterface,4,int)
|
|
#define MS_PLAYER_GET_STATE \
|
MS_FILTER_METHOD(MSFilterPlayerInterface,5,MSPlayerState)
|
|
/**enable loop mode. Argument is a pause interval in milliseconds to be observed between end of play and resuming at start. A value of -1 disables loop mode*/
|
#define MS_PLAYER_SET_LOOP \
|
MS_FILTER_METHOD(MSFilterPlayerInterface,6,int)
|
|
#define MS_PLAYER_GET_DURATION \
|
MS_FILTER_METHOD(MSFilterPlayerInterface,7,int)
|
|
#define MS_PLAYER_GET_CURRENT_POSITION \
|
MS_FILTER_METHOD(MSFilterPlayerInterface,8,int)
|
|
#define MS_PLAYER_EOF \
|
MS_FILTER_EVENT_NO_ARG(MSFilterPlayerInterface,0)
|
|
|
/**
|
* Interface definitions for recorders
|
**/
|
|
enum _MSRecorderState{
|
MSRecorderClosed,
|
MSRecorderPaused,
|
MSRecorderRunning
|
};
|
|
typedef enum _MSRecorderState MSRecorderState;
|
|
/**open a media file for recording*/
|
#define MS_RECORDER_OPEN \
|
MS_FILTER_METHOD(MSFilterRecorderInterface,0,const char )
|
|
#define MS_RECORDER_START \
|
MS_FILTER_METHOD_NO_ARG(MSFilterRecorderInterface,1)
|
|
#define MS_RECORDER_PAUSE \
|
MS_FILTER_METHOD_NO_ARG(MSFilterRecorderInterface,2)
|
|
#define MS_RECORDER_CLOSE \
|
MS_FILTER_METHOD_NO_ARG(MSFilterRecorderInterface,3)
|
|
#define MS_RECORDER_GET_STATE \
|
MS_FILTER_METHOD(MSFilterRecorderInterface,5,MSRecorderState)
|
|
#define MS_RECORDER_NEEDS_FIR \
|
MS_FILTER_EVENT_NO_ARG(MSFilterRecorderInterface,0)
|
|
#define MS_RECORDER_SET_MAX_SIZE \
|
MS_FILTER_METHOD(MSFilterRecorderInterface,6,int)
|
|
#define MS_RECORDER_MAX_SIZE_REACHED \
|
MS_FILTER_EVENT_NO_ARG(MSFilterRecorderInterface,1)
|
|
|
/** Interface definitions for echo cancellers */
|
|
/** sets the echo delay in milliseconds*/
|
#define MS_ECHO_CANCELLER_SET_DELAY \
|
MS_FILTER_METHOD(MSFilterEchoCancellerInterface,0,int)
|
|
#define MS_ECHO_CANCELLER_SET_FRAMESIZE \
|
MS_FILTER_METHOD(MSFilterEchoCancellerInterface,1,int)
|
|
/** sets tail length in milliseconds */
|
#define MS_ECHO_CANCELLER_SET_TAIL_LENGTH \
|
MS_FILTER_METHOD(MSFilterEchoCancellerInterface,2,int)
|
|
/** put filter in bypass mode */
|
#define MS_ECHO_CANCELLER_SET_BYPASS_MODE \
|
MS_FILTER_METHOD(MSFilterEchoCancellerInterface,3,bool_t)
|
/** get filter bypass mode */
|
#define MS_ECHO_CANCELLER_GET_BYPASS_MODE \
|
MS_FILTER_METHOD(MSFilterEchoCancellerInterface,4,bool_t)
|
|
/** retrieve echo canceller internal state, as a base64 encoded string */
|
#define MS_ECHO_CANCELLER_GET_STATE_STRING \
|
MS_FILTER_METHOD(MSFilterEchoCancellerInterface,5,char *)
|
|
/** restore a previous state suppling the echo canceller config as base64 encoded string */
|
#define MS_ECHO_CANCELLER_SET_STATE_STRING \
|
MS_FILTER_METHOD(MSFilterEchoCancellerInterface,6, const char)
|
|
|
|
/** Event definitions for video decoders */
|
#define MS_VIDEO_DECODER_DECODING_ERRORS \
|
MS_FILTER_EVENT_NO_ARG(MSFilterVideoDecoderInterface,0)
|
#define MS_VIDEO_DECODER_FIRST_IMAGE_DECODED \
|
MS_FILTER_EVENT_NO_ARG(MSFilterVideoDecoderInterface,1)
|
#define MS_VIDEO_DECODER_SEND_PLI \
|
MS_FILTER_EVENT_NO_ARG(MSFilterVideoDecoderInterface, 2)
|
#define MS_VIDEO_DECODER_SEND_SLI \
|
MS_FILTER_EVENT(MSFilterVideoDecoderInterface, 3, MSVideoCodecSLI)
|
#define MS_VIDEO_DECODER_SEND_RPSI \
|
MS_FILTER_EVENT(MSFilterVideoDecoderInterface, 4, MSVideoCodecRPSI)
|
#define MS_VIDEO_DECODER_SEND_FIR \
|
MS_FILTER_EVENT_NO_ARG(MSFilterVideoDecoderInterface, 5)
|
|
/** Method definitions for video decoders */
|
#define MS_VIDEO_DECODER_RESET_FIRST_IMAGE_NOTIFICATION \
|
MS_FILTER_METHOD_NO_ARG(MSFilterVideoDecoderInterface, 5)
|
#define MS_VIDEO_DECODER_ENABLE_AVPF \
|
MS_FILTER_METHOD(MSFilterVideoDecoderInterface, 6, bool_t)
|
#define MS_VIDEO_DECODER_SUPPORT_RENDERING \
|
MS_FILTER_METHOD(MSFilterVideoDecoderInterface, 7, MSVideoDisplayDecodingSupport)
|
#define MS_VIDEO_DECODER_FREEZE_ON_ERROR \
|
MS_FILTER_METHOD(MSFilterVideoDecoderInterface, 8, bool_t)
|
#define MS_VIDEO_DECODER_RECOVERED_FROM_ERRORS \
|
MS_FILTER_EVENT_NO_ARG(MSFilterVideoDecoderInterface, 9)
|
#define MS_VIDEO_DECODER_RESET \
|
MS_FILTER_METHOD_NO_ARG(MSFilterVideoDecoderInterface, 10)
|
#define MS_VIDEO_DECODER_FREEZE_ON_ERROR_ENABLED \
|
MS_FILTER_METHOD(MSFilterVideoDecoderInterface, 11, bool_t)
|
|
|
|
/** Interface definitions for video capture */
|
#define MS_VIDEO_CAPTURE_SET_DEVICE_ORIENTATION \
|
MS_FILTER_METHOD(MSFilterVideoCaptureInterface, 0,int)
|
#define MS_VIDEO_CAPTURE_GET_CAMERA_SENSOR_ROTATION \
|
MS_FILTER_METHOD(MSFilterVideoCaptureInterface, 1, int)
|
#define MS_CAMERA_PREVIEW_SIZE_CHANGED \
|
MS_FILTER_EVENT(MS_ANDROID_VIDEO_READ_ID, 0, MSVideoSize)
|
|
/** Interface definitions for audio decoder */
|
|
#define MS_AUDIO_DECODER_HAVE_PLC \
|
MS_FILTER_METHOD(MSFilterAudioDecoderInterface,0,int)
|
|
#define MS_DECODER_HAVE_PLC MS_AUDIO_DECODER_HAVE_PLC /*for backward compatibility*/
|
|
#define MS_AUDIO_DECODER_SET_RTP_PAYLOAD_PICKER \
|
MS_FILTER_METHOD(MSFilterAudioDecoderInterface,1,MSRtpPayloadPickerContext)
|
|
#define MS_DECODER_ENABLE_PLC MS_FILTER_METHOD(MSFilterAudioDecoderInterface,2,int)
|
/**
|
* Interface definition for video encoders.
|
**/
|
|
#define MS_VIDEO_ENCODER_SUPPORTS_PIXFMT \
|
MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 0, MSVideoEncoderPixFmt)
|
/* request a video-fast-update (=I frame for H263,MP4V-ES) to a video encoder*/
|
#define MS_VIDEO_ENCODER_REQ_VFU \
|
MS_FILTER_METHOD_NO_ARG(MSFilterVideoEncoderInterface, 1)
|
#define MS_VIDEO_ENCODER_GET_CONFIGURATION_LIST \
|
MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 2, const MSVideoConfiguration *)
|
#define MS_VIDEO_ENCODER_SET_CONFIGURATION \
|
MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 3, const MSVideoConfiguration )
|
#define MS_VIDEO_ENCODER_NOTIFY_PLI \
|
MS_FILTER_METHOD_NO_ARG(MSFilterVideoEncoderInterface, 4)
|
#define MS_VIDEO_ENCODER_NOTIFY_FIR \
|
MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 5, uint8_t *)
|
#define MS_VIDEO_ENCODER_NOTIFY_SLI \
|
MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 6, MSVideoCodecSLI)
|
#define MS_VIDEO_ENCODER_NOTIFY_RPSI \
|
MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 7, MSVideoCodecRPSI)
|
#define MS_VIDEO_ENCODER_ENABLE_AVPF \
|
MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 8, bool_t)
|
#define MS_VIDEO_ENCODER_SET_CONFIGURATION_LIST \
|
MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 9, const MSVideoConfiguration *)
|
#define MS_VIDEO_ENCODER_IS_HARDWARE_ACCELERATED \
|
MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 10, bool_t)
|
#define MS_VIDEO_ENCODER_GET_CONFIGURATION \
|
MS_FILTER_METHOD(MSFilterVideoEncoderInterface, 11, MSVideoConfiguration )
|
|
/** Interface definitions for audio capture */
|
/* Start numbering from the end for hacks */
|
#define MS_AUDIO_CAPTURE_SET_VOLUME_GAIN \
|
MS_FILTER_METHOD(MSFilterAudioCaptureInterface, 0, float)
|
#define MS_AUDIO_CAPTURE_GET_VOLUME_GAIN \
|
MS_FILTER_METHOD(MSFilterAudioCaptureInterface, 1, float)
|
/** Set capture device ID */
|
#define MS_AUDIO_CAPTURE_SET_INTERNAL_ID \
|
MS_FILTER_METHOD(MSFilterAudioCaptureInterface, 2, int)
|
/** Get capture device ID */
|
#define MS_AUDIO_CAPTURE_GET_INTERNAL_ID \
|
MS_FILTER_METHOD(MSFilterAudioCaptureInterface, 3, int)
|
#define MS_AUDIO_CAPTURE_MUTE \
|
MS_FILTER_METHOD(MSFilterAudioCaptureInterface, 4, int)
|
#define MS_AUDIO_CAPTURE_FORCE_SPEAKER_STATE \
|
MS_FILTER_METHOD(MSFilterAudioCaptureInterface, 255, bool_t)
|
|
/** Interface definitions for audio playback */
|
enum _MSAudioRoute{
|
MSAudioRouteEarpiece,
|
MSAudioRouteSpeaker
|
};
|
typedef enum _MSAudioRoute MSAudioRoute;
|
|
#define MS_AUDIO_PLAYBACK_SET_VOLUME_GAIN \
|
MS_FILTER_METHOD(MSFilterAudioPlaybackInterface, 0, float)
|
#define MS_AUDIO_PLAYBACK_GET_VOLUME_GAIN \
|
MS_FILTER_METHOD(MSFilterAudioPlaybackInterface, 1, float)
|
#define MS_AUDIO_PLAYBACK_SET_ROUTE \
|
MS_FILTER_METHOD(MSFilterAudioPlaybackInterface, 2, MSAudioRoute)
|
#define MS_AUDIO_PLAYBACK_MUTE \
|
MS_FILTER_METHOD(MSFilterAudioPlaybackInterface, 3, int)
|
/** Set playback device ID */
|
#define MS_AUDIO_PLAYBACK_SET_INTERNAL_ID \
|
MS_FILTER_METHOD(MSFilterAudioPlaybackInterface, 4, int)
|
/** Get playback device ID */
|
#define MS_AUDIO_PLAYBACK_GET_INTERNAL_ID \
|
MS_FILTER_METHOD(MSFilterAudioPlaybackInterface, 5, int)
|
|
/** Interface definitions for audio encoder */
|
#define MS_AUDIO_ENCODER_SET_PTIME \
|
MS_FILTER_METHOD(MSFilterAudioEncoderInterface,0,int)
|
|
#define MS_AUDIO_ENCODER_GET_PTIME \
|
MS_FILTER_METHOD(MSFilterAudioEncoderInterface,1,int)
|
|
/* Enable encoder's builtin forward error correction, if available*/
|
#define MS_AUDIO_ENCODER_ENABLE_FEC \
|
MS_FILTER_METHOD(MSFilterAudioEncoderInterface,2,int)
|
|
/* Set the packet loss percentage reported, so that encoder may compensate if forward-correction is enabled and implemented.*/
|
#define MS_AUDIO_ENCODER_SET_PACKET_LOSS \
|
MS_FILTER_METHOD(MSFilterAudioEncoderInterface,3,int)
|
|
#define MS_AUDIO_ENCODER_CAP_AUTO_PTIME (1)
|
|
#define MS_AUDIO_ENCODER_GET_CAPABILITIES \
|
MS_FILTER_METHOD(MSFilterAudioEncoderInterface,4,int)
|
|
/** Interface definitions for VAD */
|
#define MS_VAD_ENABLE_SILENCE_DETECTION \
|
MS_FILTER_METHOD(MSFilterVADInterface, 0, int)
|
|
/* Set the silence duration threshold in ms */
|
#define MS_VAD_SET_SILENCE_DURATION_THRESHOLD \
|
MS_FILTER_METHOD(MSFilterVADInterface, 1, unsigned int)
|
|
/* Specific to each VAD implementation */
|
#define MS_VAD_SET_MODE \
|
MS_FILTER_METHOD(MSFilterVADInterface, 2, int)
|
|
#define MS_VAD_EVENT_SILENCE_DETECTED \
|
MS_FILTER_EVENT_NO_ARG(MSFilterVADInterface, 0)
|
|
/* Give the end of silence and duration in ms */
|
#define MS_VAD_EVENT_SILENCE_ENDED \
|
MS_FILTER_EVENT(MSFilterVADInterface, 1, unsigned int)
|
|
/** Interface definitions for void source/sink */
|
#define MS_VOID_SOURCE_SEND_SILENCE \
|
MS_FILTER_METHOD(MSFilterVoidInterface, 0, bool_t)
|
|
#endif
|