@@ -89,6 +89,7 @@ GST_DEBUG_CATEGORY_STATIC (gst_kvs_sink_debug);
8989#define DEFAULT_FRAGMENT_ACKS TRUE
9090#define DEFAULT_RESTART_ON_ERROR TRUE
9191#define DEFAULT_RECALCULATE_METRICS TRUE
92+ #define DEFAULT_DISABLE_BUFFER_CLIPPING FALSE
9293#define DEFAULT_STREAM_FRAMERATE 25
9394#define DEFAULT_STREAM_FRAMERATE_HIGH_DENSITY 100
9495#define DEFAULT_AVG_BANDWIDTH_BPS (4 * 1024 * 1024 )
@@ -158,7 +159,8 @@ enum {
158159 PROP_CREDENTIAL_FILE_PATH,
159160 PROP_IOT_CERTIFICATE,
160161 PROP_STREAM_TAGS,
161- PROP_FILE_START_TIME
162+ PROP_FILE_START_TIME,
163+ PROP_DISABLE_BUFFER_CLIPPING
162164};
163165
164166#define GST_TYPE_KVS_SINK_STREAMING_TYPE (gst_kvs_sink_streaming_type_get_type())
@@ -380,7 +382,7 @@ void create_kinesis_video_stream(GstKvsSink *kvssink) {
380382 if (data->media_type == AUDIO_VIDEO) {
381383 stream_definition->addTrack (KVS_SINK_DEFAULT_AUDIO_TRACKID, DEFAULT_AUDIO_TRACK_NAME, kvssink->audio_codec_id , MKV_TRACK_INFO_TYPE_AUDIO);
382384 // Need to reorder frames to avoid fragment overlap error.
383- stream_definition->setFrameOrderMode (FRAME_ORDERING_MODE_MULTI_TRACK_AV_COMPARE_PTS_ONE_MS_COMPENSATE );
385+ stream_definition->setFrameOrderMode (FRAME_ORDERING_MODE_MULTI_TRACK_AV_COMPARE_PTS_ONE_MS_COMPENSATE_EOFR );
384386 }
385387
386388 data->kinesis_video_stream = data->kinesis_video_producer ->createStreamSync (move (stream_definition));
@@ -558,6 +560,11 @@ gst_kvs_sink_class_init(GstKvsSinkClass *klass) {
558560 " Epoch time that the file starts in kinesis video stream. By default, current time is used. Unit: Seconds" ,
559561 0 , G_MAXULONG, 0 , (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
560562
563+ g_object_class_install_property (gobject_class, PROP_DISABLE_BUFFER_CLIPPING,
564+ g_param_spec_boolean (" disable-buffer-clipping" , " Disable Buffer Clipping" ,
565+ " Set to true only if your src/mux elements produce GST_CLOCK_TIME_NONE for segment start times. It is non-standard behavior to set this to true, only use if there are known issues with your src/mux segment start/stop times." , DEFAULT_DISABLE_BUFFER_CLIPPING,
566+ (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
567+
561568 gst_element_class_set_static_metadata (gstelement_class,
562569 " KVS Sink" ,
563570 " Sink/Video/Network" ,
@@ -575,9 +582,6 @@ gst_kvs_sink_class_init(GstKvsSinkClass *klass) {
575582static void
576583gst_kvs_sink_init (GstKvsSink *kvssink) {
577584 kvssink->collect = gst_collect_pads_new ();
578-
579- gst_collect_pads_set_clip_function (kvssink->collect ,
580- GST_DEBUG_FUNCPTR (gst_collect_pads_clip_running_time), kvssink);
581585 gst_collect_pads_set_buffer_function (kvssink->collect ,
582586 GST_DEBUG_FUNCPTR (gst_kvs_sink_handle_buffer), kvssink);
583587 gst_collect_pads_set_event_function (kvssink->collect ,
@@ -606,6 +610,7 @@ gst_kvs_sink_init(GstKvsSink *kvssink) {
606610 kvssink->buffer_duration_seconds = DEFAULT_BUFFER_DURATION_SECONDS;
607611 kvssink->replay_duration_seconds = DEFAULT_REPLAY_DURATION_SECONDS;
608612 kvssink->connection_staleness_seconds = DEFAULT_CONNECTION_STALENESS_SECONDS;
613+ kvssink->disable_buffer_clipping = DEFAULT_DISABLE_BUFFER_CLIPPING;
609614 kvssink->codec_id = g_strdup (DEFAULT_CODEC_ID_H264);
610615 kvssink->track_name = g_strdup (DEFAULT_TRACKNAME);
611616 kvssink->access_key = g_strdup (DEFAULT_ACCESS_KEY);
@@ -772,6 +777,14 @@ gst_kvs_sink_set_property(GObject *object, guint prop_id,
772777 case PROP_FILE_START_TIME:
773778 kvssink->file_start_time = g_value_get_uint64 (value);
774779 break ;
780+ case PROP_DISABLE_BUFFER_CLIPPING: {
781+ kvssink->disable_buffer_clipping = g_value_get_boolean (value);
782+ if (kvssink->disable_buffer_clipping == FALSE ) {
783+ gst_collect_pads_set_clip_function (kvssink->collect ,
784+ GST_DEBUG_FUNCPTR (gst_collect_pads_clip_running_time), kvssink);
785+ }
786+ break ;
787+ }
775788 default :
776789 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
777790 break ;
@@ -876,6 +889,9 @@ gst_kvs_sink_get_property(GObject *object, guint prop_id, GValue *value,
876889 case PROP_FILE_START_TIME:
877890 g_value_set_uint64 (value, kvssink->file_start_time );
878891 break ;
892+ case PROP_DISABLE_BUFFER_CLIPPING:
893+ g_value_set_boolean (value, kvssink->disable_buffer_clipping );
894+ break ;
879895 default :
880896 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
881897 break ;
@@ -1071,7 +1087,7 @@ gst_kvs_sink_handle_buffer (GstCollectPads * pads,
10711087 (GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_HEADER) && (!GST_BUFFER_PTS_IS_VALID (buf) || !GST_BUFFER_DTS_IS_VALID (buf)));
10721088
10731089 if (isDroppable) {
1074- LOG_DEBUG (" Dropping frame with flag %u " << GST_BUFFER_FLAGS (buf));
1090+ LOG_DEBUG (" Dropping frame with flag: " << GST_BUFFER_FLAGS (buf));
10751091 goto CleanUp;
10761092 }
10771093
0 commit comments