/* * Copyright (C) 2018 Amlogic Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef _DTV_PATCH_H_ #define _DTV_PATCH_H_ typedef enum { AUDIO_DTV_PATCH_DECODER_STATE_NULL, AUDIO_DTV_PATCH_DECODER_STATE_INIT, AUDIO_DTV_PATCH_DECODER_STATE_RUNNING, AUDIO_DTV_PATCH_DECODER_STATE_PAUSE, } AUDIO_DTV_PATCH_DECODER_STATE_TYPE; /* refer to AudioSystemCmdManager */ typedef enum { AUDIO_DTV_PATCH_CMD_NULL = 0, AUDIO_DTV_PATCH_CMD_START = 1, /* AUDIO_SERVICE_CMD_START_DECODE */ AUDIO_DTV_PATCH_CMD_PAUSE = 2, /* AUDIO_SERVICE_CMD_PAUSE_DECODE */ AUDIO_DTV_PATCH_CMD_RESUME = 3, /* AUDIO_SERVICE_CMD_RESUME_DECODE */ AUDIO_DTV_PATCH_CMD_STOP = 4, /* AUDIO_SERVICE_CMD_STOP_DECODE */ AUDIO_DTV_PATCH_CMD_SET_AD_SUPPORT = 5, /* AUDIO_SERVICE_CMD_SET_DECODE_AD */ AUDIO_DTV_PATCH_CMD_SET_VOLUME = 6, /*AUDIO_SERVICE_CMD_SET_VOLUME*/ AUDIO_DTV_PATCH_CMD_SET_MUTE = 7, /*AUDIO_SERVICE_CMD_SET_MUTE*/ AUDIO_DTV_PATCH_CMD_SET_OUTPUT_MODE = 8,/*AUDIO_SERVICE_CMD_SET_OUTPUT_MODE */ AUDIO_DTV_PATCH_CMD_SET_PRE_GAIN = 9, /*AUDIO_SERVICE_CMD_SET_PRE_GAIN */ AUDIO_DTV_PATCH_CMD_SET_PRE_MUTE = 10, /*AUDIO_SERVICE_CMD_SET_PRE_MUTE */ AUDIO_DTV_PATCH_CMD_OPEN = 12, /*AUDIO_SERVICE_CMD_OPEN_DECODER */ AUDIO_DTV_PATCH_CMD_CLOSE = 13, /*AUDIO_SERVICE_CMD_CLOSE_DECODER */ AUDIO_DTV_PATCH_CMD_SET_DEMUX_INFO = 14, /*AUDIO_SERVICE_CMD_SET_DEMUX_INFO ;*/ AUDIO_DTV_PATCH_CMD_SET_SECURITY_MEM_LEVEL = 15,/*AUDIO_SERVICE_CMD_SET_SECURITY_MEM_LEVEL*/ AUDIO_DTV_PATCH_CMD_SET_HAS_VIDEO = 16,/*AUDIO_SERVICE_CMD_SET_HAS_VIDEO */ AUDIO_DTV_PATCH_CMD_CONTROL = 17, AUDIO_DTV_PATCH_CMD_SET_PID = 18, AUDIO_DTV_PATCH_CMD_SET_FMT = 19, AUDIO_DTV_PATCH_CMD_SET_AD_PID = 20, AUDIO_DTV_PATCH_CMD_SET_AD_FMT = 21, AUDIO_DTV_PATCH_CMD_SET_AD_ENABLE = 22, AUDIO_DTV_PATCH_CMD_SET_AD_MIX_LEVEL = 23, AUDIO_DTV_PATCH_CMD_SET_AD_VOL_LEVEL = 24, AUDIO_DTV_PATCH_CMD_SET_MEDIA_SYNC_ID = 25, AUDIO_DTV_PATCH_CMD_SET_MEDIA_PRESENTATION_ID = 26, AUDIO_DTV_PATCH_CMD_SET_DTV_LATENCYMS_ID = 27, AUDIO_DTV_PATCH_CMD_SET_MEDIA_FIRST_LANG = 29, AUDIO_DTV_PATCH_CMD_SET_MEDIA_SECOND_LANG = 30, AUDIO_DTV_PATCH_CMD_SET_SPDIF_PROTECTION_MODE = 31, AUDIO_DTV_PATCH_CMD_SET_DECODER_ID = 32, AUDIO_DTV_PATCH_CMD_NUM = 33, } AUDIO_DTV_PATCH_CMD_TYPE; enum { AVSYNC_ACTION_NORMAL, AVSYNC_ACTION_DROP, AVSYNC_ACTION_HOLD, }; enum { DIRECT_SPEED = 0, // DERIECT_SPEED DIRECT_SLOW, DIRECT_NORMAL, }; enum { AUDIO_FREE = 0, AUDIO_BREAK, AUDIO_LOOKUP, AUDIO_DROP, AUDIO_RAISE, AUDIO_LATENCY, AUDIO_RUNNING, }; enum { TSYNC_MODE_VMASTER = 0, TSYNC_MODE_AMASTER, TSYNC_MODE_PCRMASTER, }; #define DVB_DEMUX_SUPPORT_MAX_NUM 6 #define DATA_TIMEOUT 500 typedef struct dtv_path { int path_id; pthread_mutex_t dtv_path_lock; struct cmd_node *dtv_cmd_list; pthread_cond_t dtv_cmd_process_cond; pthread_mutex_t dtv_cmd_process_mutex; int cmd_process_thread_exit; pthread_t audio_cmd_process_threadID; unsigned int cmd_process_thread_created; int dtv_decoder_state; aml_demux_audiopara_t demux_info; int media_sync_id; int dtv_first_apts_flag; /*first apts looked up flag*/ struct aml_stream_out * dtv_aml_out; struct aml_stream_out * dtv_ad_aml_out; pthread_mutex_t apts_cal_mutex; pthread_cond_t apts_cond; unsigned int ad_output_thread_created; unsigned int output_thread_created; int output_thread_exit; int ad_output_thread_exit; pthread_t audio_output_threadID; pthread_t audio_ad_output_threadID; int64_t last_valid_main_pts; int64_t last_valid_ad_pts; uint8_t pts_dts_flag; int32_t dtv_path_decoder_id; bool pending_decoder_id; uint8_t ad_fade; uint8_t ad_pan; } dtv_path_t; #ifdef BUILD_LINUX #ifndef __unused #define __unused __attribute__((unused)) #endif #endif int create_dtv_patch(struct aml_audio_device *dev, void ** apatch); int release_dtv_patch(struct aml_audio_device *dev, void *apatch); int dtv_patch_handle_event(struct audio_hw_device *dev,int cmd, int val); int dtv_path_get_es_pts_dts_flag(int path_id); int dtv_path_get_mediasync_id(int path_id); int dtv_queue_es_info(void *info); #endif