Files
BPI-CM9-Linux/aml-comp/multimedia/aml_audio_hal/input/include/dtv_patch.h
T
2026-08-24 10:03:24 +08:00

143 lines
4.8 KiB
C

/*
* 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