Discussion:
How to disable sync in parser h265parse element..weird issue
new baby
2018-11-15 10:14:42 UTC
Permalink
Hi experts,

I am facing a weird issue, with h265parse for resolution more then
1280x720p:
but For h264parser it works but for h265parse it doesn;t work more the
1280x720p

*I am able to run with 1280x720 resolution input but not more then that .*
I am passing encoded file to h265parser and muxing it, with src, sink like
in example in tutorials(almost similar)
https://gstreamer.freedesktop.org/documentation/tutorials/basic/short-cutting-the-pipeline.html

*Error*
*cmd appsrc name = videosource ! queue max-size-buffers=0
max-size-time=0 max-size-bytes=0 min-threshold-time=0000000000 !
video/x-h265 ,width=(int)3840, height=(int)1920,
framerate=(fraction)24000/1000, stream-format=byte-stream, bitrate=8000 !
queue ! h265parse ! mpegtsmux name = mux ! chopmydata
max-size=1316 min-size=1316 ! queue ! appsink name = sink*
GPU in use: GeForce GTX 1070
Decode with demuxing.
[INFO ][15:39:29] Encoding Parameters:
codec : hevc
preset : ll_hp
profile : (default)
chroma : yuv420
bitdepth : 8
rc : cbr_ll_hq
fps : 24000/1000
gop : INF
bf : 0
size : 3840x1920
bitrate : 8000000
maxbitrate : 4000000
vbvbufsize : 666665
vbvinit : 666665
aq : disabled
temporalaq : disabled
lookahead : disabled
cq :
qmin : P,B,I=0,0,0
qmax : P,B,I=0,0,0
initqp : P,B,I=0,0,0

Encoder start
Running...

g loop running
0:00:00.787981007 5236 000002225F22CE00 WARN h265parse
gsth265parse.c:983:gst_h265_parse_handle_frame:<h265parse0> no SPS/PPS yet,
nal Type: 35 AUD, Size: 3 will be dropped
0:00:00.890039469 5236 000002225F22CE00 WARN baseparse
*gstbaseparse.c:2954:gst_base_parse_check_sync:<h error: Failed to parse
stream
Error received from element h265parse0: Failed to parse stream&lt;/b>
0:00:00.927757091 5236Debugging information: gstbaseparse.c(2954):
gst_base_parse_check_sync (): /GstPipeline:pipeline0/GstH265Parse:h265parse0
000002225F22CD80

*This the function which gives error *

/* small helper that checks whether we have been trying to resync too long
*/
static inline GstFlowReturn
gst_base_parse_check_sync (GstBaseParse * parse)
{
if (G_UNLIKELY (parse->priv->discont &&
parse->priv->offset - parse->priv->sync_offset > 2 * 1024 * 1024))
{
GST_ELEMENT_ERROR (parse, STREAM, DECODE,
("Failed to parse stream"), (NULL));
return GST_FLOW_ERROR;
}

return GST_FLOW_OK;
}

MY Quesion:
1) How to disable the sync , such that it should not check this condition?
2) How to solve the error as this works in commandline but not in pipeline
approch.
3) WHat i am doing wrong or what i am missing.


Note :
For h264parser it works but for h265parse it doesn;t work more the 1280x720p






-----
adi
--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
Nicolas Dufresne
2018-11-15 15:36:14 UTC
Permalink
Post by new baby
Hi experts,
I am facing a weird issue, with h265parse for resolution more then
but For h264parser it works but for h265parse it doesn;t work more the
1280x720p
*I am able to run with 1280x720 resolution input but not more then that .*
I am passing encoded file to h265parser and muxing it, with src, sink like
in example in tutorials(almost similar)
https://gstreamer.freedesktop.org/documentation/tutorials/basic/short-cutting-the-pipeline.html
*Error*
*cmd appsrc name = videosource ! queue max-size-buffers=0
max-size-time=0 max-size-bytes=0 min-threshold-time=0000000000 !
video/x-h265 ,width=(int)3840, height=(int)1920,
framerate=(fraction)24000/1000, stream-format=byte-stream, bitrate=8000 !
queue ! h265parse ! mpegtsmux name = mux ! chopmydata
max-size=1316 min-size=1316 ! queue ! appsink name = sink*
GPU in use: GeForce GTX 1070
Decode with demuxing.
codec : hevc
preset : ll_hp
profile : (default)
chroma : yuv420
bitdepth : 8
rc : cbr_ll_hq
fps : 24000/1000
gop : INF
bf : 0
size : 3840x1920
bitrate : 8000000
maxbitrate : 4000000
vbvbufsize : 666665
vbvinit : 666665
aq : disabled
temporalaq : disabled
lookahead : disabled
qmin : P,B,I=0,0,0
qmax : P,B,I=0,0,0
initqp : P,B,I=0,0,0
Encoder start
Running...
g loop running
0:00:00.787981007 5236 000002225F22CE00 WARN h265parse
gsth265parse.c:983:gst_h265_parse_handle_frame:<h265parse0> no SPS/PPS yet,
nal Type: 35 AUD, Size: 3 will be dropped
0:00:00.890039469 5236 000002225F22CE00 WARN baseparse
*gstbaseparse.c:2954:gst_base_parse_check_sync:<h error: Failed to parse
stream
Error received from element h265parse0: Failed to parse stream&lt;/b>
gst_base_parse_check_sync (): /GstPipeline:pipeline0/GstH265Parse:h265parse0
000002225F22CD80
*This the function which gives error *
/* small helper that checks whether we have been trying to resync too long
*/
static inline GstFlowReturn
gst_base_parse_check_sync (GstBaseParse * parse)
{
if (G_UNLIKELY (parse->priv->discont &&
parse->priv->offset - parse->priv->sync_offset > 2 * 1024 * 1024))
{
GST_ELEMENT_ERROR (parse, STREAM, DECODE,
("Failed to parse stream"), (NULL));
return GST_FLOW_ERROR;
}
return GST_FLOW_OK;
}
1) How to disable the sync , such that it should not check this condition?
I wonder what issue this was trying to fix. Maybe it's worth blaming
these changes. To me, we should keep parsing random forever, we should
not hardcode how much garbage is allowed before an SPS/PPS is seen. We
could of course push warning message from time to time.
Post by new baby
2) How to solve the error as this works in commandline but not in pipeline
approch.
Just make sure you have a PPS/VPS/SPS within 2 MB of data (two
megabytes is really small, I'm surprised I have never met this issue
before, since I do a lot of 4K streaming).
Post by new baby
3) WHat i am doing wrong or what i am missing.
Don't blame yourself, it's likely a bug in GStreamer. I would propose
to change this code to increase this size or remove this error
completely (I really like the second option, but have no context).

Nicolas
devil coder
2018-11-21 07:13:20 UTC
Permalink
Hi all ,

I found the issue..my Nvidia SDK encoder gives a vector output but i was not
allocating memory properly ..

*ERROR*
vTempPacket = pEncoder->EncodeVideo();
buffer = gst_buffer_new_allocate(NULL,
packet.size(), NULL);
gst_buffer_map(buffer, &map, GST_MAP_WRITE);
map.size = packet.size();

memcpy(map.data, packet.data(), packet.size());

g_signal_emit_by_name(pstCallBackControl->pstGstConfig->AppSrc,
"push-buffer",
buffer, &ret);
gst_buffer_unmap(buffer, &map);
gst_buffer_unref(buffer);


*Fix :*

vTempPacket = pEncoder->EncodeVideo();

for (std::vector<uint8_t> &packet : vTempPacket)
{
buffer = gst_buffer_new_allocate(NULL, packet.size(), NULL);
gst_buffer_map(buffer, &map, GST_MAP_WRITE);
map.size = packet.size();

memcpy(map.data, packet.data(), packet.size());

g_signal_emit_by_name(pstCallBackControl->pstGstConfig->AppSrc,
"push-buffer",
buffer, &ret);
gst_buffer_unmap(buffer, &map);
gst_buffer_unref(buffer);
}



-----
adi
--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/

Loading...