1 /* 2 * Copyright (C) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 17 #ifndef GST_AUDIO_SERVER_SINK_H 18 #define GST_AUDIO_SERVER_SINK_H 19 20 #include <mutex> 21 #include <memory> 22 #include <gst/base/gstbasesink.h> 23 #include "audio_sink.h" 24 #include "common_utils.h" 25 26 G_BEGIN_DECLS 27 28 #define GST_TYPE_AUDIO_SERVER_SINK \ 29 (gst_audio_server_sink_get_type()) 30 #define GST_AUDIO_SERVER_SINK(obj) \ 31 (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_AUDIO_SERVER_SINK, GstAudioServerSink)) 32 #define GST_AUDIO_SERVER_SINK_CLASS(klass) \ 33 (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_AUDIO_SERVER_SINK, GstAudioServerSinkClass)) 34 #define GST_IS_AUDIO_SERVER_SINK(obj) \ 35 (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_AUDIO_SERVER_SINK)) 36 #define GST_IS_AUDIO_SERVER_SINK_CLASS(klass) \ 37 (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_AUDIO_SERVER_SINK)) 38 #define GST_AUDIO_SERVER_SINK_CAST(obj) ((GstAudioServerSink *)(obj)) 39 40 struct _GstAudioServerSink { 41 GstBaseSink parent; 42 /* private */ 43 std::unique_ptr<OHOS::Media::AudioSink> audio_sink; 44 guint bits_per_sample; 45 guint channels; 46 guint sample_rate; 47 gint appuid; 48 gint apppid; 49 guint apptokenid; 50 gfloat volume; 51 gfloat max_volume; 52 gfloat min_volume; 53 guint min_buffer_size; 54 guint min_frame_count; 55 gboolean frame_after_segment; 56 GMutex render_lock; 57 std::mutex mutex_; 58 GstBuffer *pause_cache_buffer; 59 guint renderer_desc; 60 gint renderer_flag; 61 GstClockTime last_render_pts; 62 gboolean enable_opt_render_delay; 63 GstClockTimeDiff last_running_time_diff; 64 gboolean pre_power_on; 65 gboolean start_first_render; 66 guint delay_time; 67 }; 68 69 struct _GstAudioServerSinkClass { 70 GstBaseSinkClass parent_class; 71 }; 72 73 using GstAudioServerSink = struct _GstAudioServerSink; 74 using GstAudioServerSinkClass = struct _GstAudioServerSinkClass; 75 76 G_GNUC_INTERNAL GType gst_audio_server_sink_get_type(void); 77 78 G_END_DECLS 79 80 #endif // GST_AUDIO_SERVER_SINK_H 81