mirror of
git://nv-tegra.nvidia.com/tegra/gst-src/nvgstapps.git
synced 2025-12-24 11:12:53 +03:00
Compare commits
1 Commits
jetson_35.
...
jetson_35.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c08a4681dd |
@@ -1,12 +1,12 @@
|
||||
Updating prebuilts and/or headers
|
||||
|
||||
9b47978b5f3b6672dd4d6ad5ebe80c9b945a7eba - nvgstapps_src/nvgst_sample_apps/nvgstplayer-1.0/nvgst_x11_common.c
|
||||
599544266262509705c60ca9e8d2c8ade3bdfc30 - nvgstapps_src/nvgst_sample_apps/nvgstplayer-1.0/nvgstplayer.c
|
||||
c028fa403772288daf002520356e8e18cce5cb06 - nvgstapps_src/nvgst_sample_apps/nvgstplayer-1.0/nvgstplayer.h
|
||||
aaafd7fd4c0214a52bf73dd2a0ba0af08c675b85 - nvgstapps_src/nvgst_sample_apps/nvgstplayer-1.0/nvgst_x11_common.h
|
||||
33a285339d714d5546cddb92a710e418853470aa - nvgstapps_src/nvgst_sample_apps/nvgstplayer-1.0/nvgst_asound_common.c
|
||||
6bafa48f47ad43d33ee446cf86f2b1da134f7868 - nvgstapps_src/nvgst_sample_apps/nvgstplayer-1.0/nvgst_asound_common.h
|
||||
599544266262509705c60ca9e8d2c8ade3bdfc30 - nvgstapps_src/nvgst_sample_apps/nvgstplayer-1.0/nvgstplayer.c
|
||||
aaafd7fd4c0214a52bf73dd2a0ba0af08c675b85 - nvgstapps_src/nvgst_sample_apps/nvgstplayer-1.0/nvgst_x11_common.h
|
||||
c028fa403772288daf002520356e8e18cce5cb06 - nvgstapps_src/nvgst_sample_apps/nvgstplayer-1.0/nvgstplayer.h
|
||||
a5bdf6935960973677a005d9d28a04c023f5ec6f - nvgstapps_src/nvgst_sample_apps/nvgstcapture-1.0/nvgst_x11_common.c
|
||||
6380a3e21b43fdc01c6de7d3934c602af38c3d12 - nvgstapps_src/nvgst_sample_apps/nvgstcapture-1.0/nvgstcapture.c
|
||||
8531d3b2fb38ae84efeaadf6cc177e1e2b07a90b - nvgstapps_src/nvgst_sample_apps/nvgstcapture-1.0/nvgstcapture.h
|
||||
39d7bace9939d38f221edd9f87dc8e8dab2c2365 - nvgstapps_src/nvgst_sample_apps/nvgstcapture-1.0/nvgstcapture.c
|
||||
87556b6e7da0ec3865546f10b7a58959cd8c6bfc - nvgstapps_src/nvgst_sample_apps/nvgstcapture-1.0/nvgst_x11_common.h
|
||||
4048ce41fcd68ca284bf6146d2d32608fe69ca8a - nvgstapps_src/nvgst_sample_apps/nvgstcapture-1.0/nvgstcapture.h
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014-2021, NVIDIA CORPORATION. All rights reserved.
|
||||
* Copyright (c) 2014-2023, NVIDIA CORPORATION. All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
@@ -1481,6 +1481,10 @@ set_encoder_bitrate (guint bitrate)
|
||||
else if (app->capres.vid_res_index >= VR_3840x2160)
|
||||
bitrate = NVGST_DEFAULT_2160P_ENCODER_BITRATE;
|
||||
}
|
||||
if (app->encset.video_enc == FORMAT_H264_SW)
|
||||
{
|
||||
bitrate /= 1000; // x264enc requires kbits/sec
|
||||
}
|
||||
app->encset.bitrate = bitrate;
|
||||
g_print ("bitrate = %u\n", app->encset.bitrate);
|
||||
g_object_set (G_OBJECT (app->ele.vid_enc), "bitrate", app->encset.bitrate,
|
||||
@@ -1621,16 +1625,25 @@ get_video_encoder (GstElement ** vencoder)
|
||||
*vencoder = gst_element_factory_make (NVGST_PRIMARY_V4L2_VP9_VENC, NULL);
|
||||
set_encoder_bitrate (app->encset.bitrate);
|
||||
break;
|
||||
case FORMAT_H264_SW:
|
||||
*vencoder = gst_element_factory_make(NVGST_SW_H264_ENC, NULL);
|
||||
set_encoder_bitrate(app->encset.bitrate);
|
||||
break;
|
||||
default:
|
||||
*vencoder = gst_element_factory_make (NVGST_PRIMARY_V4L2_H264_VENC, NULL);
|
||||
break;
|
||||
}
|
||||
|
||||
g_object_set (*vencoder, "control-rate", app->encset.controlrate, NULL);
|
||||
if (app->encset.video_enc != FORMAT_H264_SW)
|
||||
{
|
||||
g_object_set(*vencoder, "control-rate", app->encset.controlrate, NULL);
|
||||
g_print("Encoder control-rate = %u\n", app->encset.controlrate);
|
||||
}
|
||||
if (app->encset.enabletwopassCBR)
|
||||
{
|
||||
g_object_set (*vencoder, "EnableTwopassCBR", app->encset.enabletwopassCBR, NULL);
|
||||
g_print ("Encoder control-rate = %u\n", app->encset.controlrate);
|
||||
g_print ("Encoder EnableTwopassCBR = %d\n", app->encset.enabletwopassCBR);
|
||||
g_print("Encoder EnableTwopassCBR = %d\n", app->encset.enabletwopassCBR);
|
||||
}
|
||||
|
||||
if (!(*vencoder)) {
|
||||
app->return_value = -1;
|
||||
@@ -1646,7 +1659,10 @@ get_parser (GstElement ** parser)
|
||||
{
|
||||
switch (app->encset.video_enc) {
|
||||
case FORMAT_H264_HW:
|
||||
*parser = gst_element_factory_make (NVGST_PRIMARY_H264_PARSER, NULL);
|
||||
*parser = gst_element_factory_make(NVGST_PRIMARY_H264_PARSER, NULL);
|
||||
break;
|
||||
case FORMAT_H264_SW:
|
||||
*parser = gst_element_factory_make(NVGST_PRIMARY_H264_PARSER, NULL);
|
||||
break;
|
||||
case FORMAT_H265_HW:
|
||||
*parser = gst_element_factory_make (NVGST_PRIMARY_H265_PARSER, NULL);
|
||||
@@ -2743,8 +2759,11 @@ create_video_scaling_bin (void)
|
||||
"width", G_TYPE_INT, app->capres.video_cap_width,
|
||||
"height", G_TYPE_INT, app->capres.video_cap_height, NULL);
|
||||
|
||||
feature = gst_caps_features_new ("memory:NVMM", NULL);
|
||||
gst_caps_set_features (caps, 0, feature);
|
||||
if (app->encset.video_enc != FORMAT_H264_SW)
|
||||
{
|
||||
feature = gst_caps_features_new("memory:NVMM", NULL);
|
||||
gst_caps_set_features (caps, 0, feature);
|
||||
}
|
||||
|
||||
/* Set capture caps on capture filter */
|
||||
g_object_set (app->ele.svc_vidvconv_out_filter, "caps", caps, NULL);
|
||||
@@ -2875,6 +2894,10 @@ rtsp_video_stream_new (GObject * media)
|
||||
case FORMAT_VP9_HW:
|
||||
appsrc_caps = gst_caps_from_string ("video/x-vp9");
|
||||
break;
|
||||
case FORMAT_H264_SW:
|
||||
appsrc_caps =
|
||||
gst_caps_from_string("video/x-h264, stream-format=byte-stream, alignment=au");
|
||||
break;
|
||||
default:
|
||||
appsrc_caps = gst_caps_from_string ("video/x-h264");
|
||||
break;
|
||||
@@ -3014,8 +3037,12 @@ create_streaming_file_src_bin (void)
|
||||
gst_caps_new_simple ("video/x-raw", "format", G_TYPE_STRING, "I420",
|
||||
"width", G_TYPE_INT, width, "height", G_TYPE_INT, height, NULL);
|
||||
|
||||
feature = gst_caps_features_new ("memory:NVMM", NULL);
|
||||
gst_caps_set_features (caps, 0, feature);
|
||||
if (app->encset.video_enc != FORMAT_H264_SW)
|
||||
{
|
||||
feature = gst_caps_features_new("memory:NVMM", NULL);
|
||||
gst_caps_set_features (caps, 0, feature);
|
||||
}
|
||||
|
||||
g_object_set (app->ele.cap_filter, "caps", caps, NULL);
|
||||
gst_caps_unref (caps);
|
||||
|
||||
@@ -3083,6 +3110,11 @@ create_streaming_enc_bin (void)
|
||||
case FORMAT_VP9_HW:
|
||||
appsink_caps = gst_caps_from_string ("video/x-vp9");
|
||||
break;
|
||||
case FORMAT_H264_SW:
|
||||
appsink_caps =
|
||||
gst_caps_from_string
|
||||
("video/x-h264, stream-format=byte-stream, alignment=au");
|
||||
break;
|
||||
default:
|
||||
appsink_caps = gst_caps_from_string ("video/x-h264");
|
||||
break;
|
||||
@@ -3145,13 +3177,32 @@ create_vid_enc_bin (void)
|
||||
caps =
|
||||
gst_caps_new_simple ("video/x-raw","format", G_TYPE_STRING, "NV12", NULL);
|
||||
|
||||
feature = gst_caps_features_new ("memory:NVMM", NULL);
|
||||
gst_caps_set_features (caps, 0, feature);
|
||||
if (app->encset.video_enc != FORMAT_H264_SW) {
|
||||
feature = gst_caps_features_new("memory:NVMM", NULL);
|
||||
gst_caps_set_features(caps, 0, feature);
|
||||
}
|
||||
|
||||
g_object_set (G_OBJECT (app->ele.vid_enc_cap_filter), "caps", caps, NULL);
|
||||
gst_caps_unref (caps);
|
||||
}
|
||||
|
||||
if ((app->cam_src == NV_CAM_SRC_CSI) && (app->encset.video_enc == FORMAT_H264_SW))
|
||||
{
|
||||
app->ele.vid_enc_conv = gst_element_factory_make("nvvidconv", "nvvidconv");
|
||||
if (!app->ele.vid_enc_conv)
|
||||
{
|
||||
NVGST_ERROR_MESSAGE("nvvidconv element could not be created.\n");
|
||||
goto fail;
|
||||
}
|
||||
app->ele.vid_enc_cap_filter =
|
||||
gst_element_factory_make(NVGST_DEFAULT_CAPTURE_FILTER, NULL);
|
||||
caps =
|
||||
gst_caps_new_simple("video/x-raw", "format", G_TYPE_STRING, "NV12", NULL);
|
||||
|
||||
g_object_set(G_OBJECT(app->ele.vid_enc_cap_filter), "caps", caps, NULL);
|
||||
gst_caps_unref(caps);
|
||||
}
|
||||
|
||||
app->ele.video_sink =
|
||||
gst_element_factory_make (NVGST_DEFAULT_VENC_SINK, NULL);
|
||||
if (!app->ele.video_sink) {
|
||||
@@ -3193,8 +3244,25 @@ create_vid_enc_bin (void)
|
||||
}
|
||||
else
|
||||
{
|
||||
gst_bin_add_many (GST_BIN (app->ele.vid_bin), app->ele.vid_enc,
|
||||
app->ele.parser, app->ele.muxer, app->ele.video_sink, NULL);
|
||||
if (app->encset.video_enc != FORMAT_H264_SW) {
|
||||
gst_bin_add_many(GST_BIN(app->ele.vid_bin), app->ele.vid_enc,
|
||||
app->ele.parser, app->ele.muxer, app->ele.video_sink, NULL);
|
||||
}
|
||||
else {
|
||||
gst_bin_add_many(GST_BIN(app->ele.vid_bin), app->ele.vid_enc_conv,
|
||||
app->ele.vid_enc_cap_filter, app->ele.vid_enc,
|
||||
app->ele.parser, app->ele.muxer, app->ele.video_sink, NULL);
|
||||
|
||||
if ((gst_element_link(app->ele.vid_enc_conv, app->ele.vid_enc_cap_filter)) != TRUE) {
|
||||
NVGST_ERROR_MESSAGE("Elements could not link nvvidconv & caps filter\n");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if ((gst_element_link(app->ele.vid_enc_cap_filter, app->ele.vid_enc)) != TRUE) {
|
||||
NVGST_ERROR_MESSAGE("Elements could not link caps filter & encoder \n");
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((gst_element_link (app->ele.vid_enc, app->ele.parser)) != TRUE) {
|
||||
@@ -3204,7 +3272,6 @@ create_vid_enc_bin (void)
|
||||
|
||||
srcpad = gst_element_get_static_pad (app->ele.parser, "src");
|
||||
|
||||
|
||||
if (app->muxer_is_identity)
|
||||
{
|
||||
sinkpad = gst_element_get_static_pad (app->ele.muxer, "sink");
|
||||
@@ -3230,7 +3297,7 @@ create_vid_enc_bin (void)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if(app->cam_src != NV_CAM_SRC_CSI)
|
||||
if((app->cam_src != NV_CAM_SRC_CSI) || (app->encset.video_enc == FORMAT_H264_SW))
|
||||
{
|
||||
pad = gst_element_get_static_pad (app->ele.vid_enc_conv, "sink");
|
||||
if (!pad) {
|
||||
@@ -4099,14 +4166,14 @@ nvgst_handle_xevents ()
|
||||
static gpointer
|
||||
nvgst_x_event_thread (gpointer data)
|
||||
{
|
||||
gint64 end_time;
|
||||
g_mutex_lock (app->lock);
|
||||
while (app->disp.window) {
|
||||
nvgst_handle_xevents ();
|
||||
end_time = g_get_monotonic_time () + 1;
|
||||
g_cond_wait_until (app->x_cond, app->lock, end_time);
|
||||
g_mutex_unlock(app->lock);
|
||||
g_usleep(G_USEC_PER_SEC / 20);
|
||||
g_mutex_lock(app->lock);
|
||||
}
|
||||
g_mutex_unlock (app->lock);
|
||||
g_mutex_unlock(app->lock);
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
@@ -4295,6 +4362,7 @@ main (int argc, char *argv[])
|
||||
|
||||
/* Initialize capture params */
|
||||
capture_init_params ();
|
||||
|
||||
GOptionEntry options_argus[] = {
|
||||
{"prev-res", 0, 0, G_OPTION_ARG_CALLBACK, parse_spec,
|
||||
"Preview width & height."
|
||||
@@ -4320,7 +4388,7 @@ main (int argc, char *argv[])
|
||||
"Capture mode value (1=still 2=video)", NULL}
|
||||
,
|
||||
{"video-enc", 'v', 0, G_OPTION_ARG_INT, &app->encset.video_enc,
|
||||
"Video encoder type (0=h264[HW] 1=vp8[HW] 2=h265[HW] 3=vp9[HW])",
|
||||
"Video encoder type (0=h264[HW] 1=vp8[HW] 2=h265[HW] 3=vp9[HW] 4=h264[SW])",
|
||||
NULL}
|
||||
,
|
||||
{"hw-enc-path", 'p', 0, G_OPTION_ARG_INT, &app->encset.hw_enc_type,
|
||||
@@ -4521,6 +4589,17 @@ main (int argc, char *argv[])
|
||||
if(app->encset.bitrate != 0)
|
||||
is_user_bitrate = 1;
|
||||
|
||||
FILE *fp;
|
||||
fp = fopen(NVGST_DEFAULT_V4L2_NVENC_DEVICE_PATH, "r");
|
||||
if (fp == NULL)
|
||||
{
|
||||
if (app->encset.video_enc != FORMAT_H264_SW)
|
||||
g_print("Codec not supported. Falling back to opensrc H264 encoder\n");
|
||||
app->encset.video_enc = FORMAT_H264_SW;
|
||||
}
|
||||
if (fp)
|
||||
fclose(fp);
|
||||
|
||||
g_option_context_free (ctx);
|
||||
|
||||
if (!app->aut.automate)
|
||||
@@ -4576,6 +4655,10 @@ main (int argc, char *argv[])
|
||||
payloader = "rtpvp9pay";
|
||||
parser = "identity";
|
||||
break;
|
||||
case FORMAT_H264_SW:
|
||||
payloader = "rtph264pay";
|
||||
parser = "h264parse";
|
||||
break;
|
||||
default:
|
||||
NVGST_ERROR_MESSAGE ("Unsupported codec for streaming");
|
||||
goto done;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014-2021, NVIDIA CORPORATION. All rights reserved.
|
||||
* Copyright (c) 2014-2023, NVIDIA CORPORATION. All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
@@ -93,6 +93,7 @@ int dummy_func ()
|
||||
#define NVGST_DEFAULT_CAPTURE_FORMAT "I420"
|
||||
#define NVGST_DEFAULT_CAPTURE_FPS 30
|
||||
#define NVGST_DEFAULT_VIDCAP_DEVICE "/dev/video0"
|
||||
#define NVGST_DEFAULT_V4L2_NVENC_DEVICE_PATH "/dev/nvhost-msenc"
|
||||
#define DEFAULT_LOCATION "/dev/null"
|
||||
#define SUCCESS 0
|
||||
|
||||
@@ -143,6 +144,7 @@ int dummy_func ()
|
||||
#define NVGST_PRIMARY_V4L2_VP8_VENC "nvv4l2vp8enc"
|
||||
#define NVGST_PRIMARY_V4L2_VP9_VENC "nvv4l2vp9enc"
|
||||
#define NVGST_PRIMARY_V4L2_H265_VENC "nvv4l2h265enc"
|
||||
#define NVGST_SW_H264_ENC "x264enc"
|
||||
#define NVGST_PRIMARY_H264_PARSER "h264parse"
|
||||
#define NVGST_PRIMARY_H265_PARSER "h265parse"
|
||||
#define NVGST_PRIMARY_MP4_MUXER "qtmux"
|
||||
@@ -419,10 +421,11 @@ typedef enum
|
||||
FORMAT_H264_HW = 0,
|
||||
FORMAT_VP8_HW,
|
||||
FORMAT_H265_HW,
|
||||
FORMAT_VP9_HW
|
||||
FORMAT_VP9_HW,
|
||||
FORMAT_H264_SW
|
||||
} VideoEncFormatType;
|
||||
|
||||
#define VIDEO_ENC_STRINGS {"H.264 (HW)", "VP8 (HW)", "H.265 (HW)", "VP9 (HW)", NULL};
|
||||
#define VIDEO_ENC_STRINGS {"H.264 (HW)", "VP8 (HW)", "H.265 (HW)", "VP9 (HW)", "H264 (SW)", NULL};
|
||||
|
||||
/* H264 ENCODE PROFILE TYPE */
|
||||
typedef enum
|
||||
@@ -499,7 +502,7 @@ typedef struct
|
||||
typedef struct
|
||||
{
|
||||
gint image_enc;
|
||||
gint video_enc;
|
||||
VideoEncFormatType video_enc;
|
||||
HardwareEncoderType hw_enc_type;
|
||||
guint bitrate;
|
||||
gboolean enabletwopassCBR;
|
||||
|
||||
@@ -1 +1 @@
|
||||
jetson_35.1
|
||||
jetson_35.5
|
||||
|
||||
Reference in New Issue
Block a user