[gstreamer-bugs] [Bug 599585] New: gstrtph263pay does not allow H263 Mode B
GStreamer (bugzilla.gnome.org)
bugzilla at gnome.org
Mon Oct 26 06:30:05 PDT 2009
https://bugzilla.gnome.org/show_bug.cgi?id=599585
GStreamer | gst-plugins-good | 0.10.16
Summary: gstrtph263pay does not allow H263 Mode B
Classification: Desktop
Product: GStreamer
Version: 0.10.16
OS/Version: Linux
Status: UNCONFIRMED
Severity: normal
Priority: Normal
Component: gst-plugins-good
AssignedTo: gstreamer-bugs at lists.sourceforge.net
ReportedBy: leon.72 at hotmail.de
QAContact: gstreamer-bugs at lists.sourceforge.net
GNOME target: ---
GNOME version: ---
I use as streaming queue something like the following:
... ! ffenc_h263 ! rtph263enc ! ...
The following code inside gstrtph263pay.c is wrong:
##############################<begin code>##################################
(line 1711)
for (i = 0; i < format_props[context->piclayer->ptype_srcformat][0]; i++) {
GST_DEBUG ("Searching for gob %d", i);
bound = gst_rtp_h263_pay_gobfinder (rtph263pay, bound);
if (!bound) {
GST_WARNING
("No GOB's were found in data stream! Please enable RTP mode in
encoder. Forcing mode A for now.");
ret = gst_rtp_h263_send_entire_frame (rtph263pay, context);
goto end;
}
##############################<end code>###################################
It checks the picture for the GOBs contained. Even if it already found a bunch
of GOBs (e.g. "i" is 10 or even higher) and it does not find another GOB, its
says that "NO" GOB is found and sends the entire frame in "Mode A".
When I set
export GST_DEBUG=rtph263pay:5
This wrong behaviour can seen very good. Due to that programming error it never
sends a "Mode B" package. which is very bad, because the "Mode A" packages get
fragmented, because they have (at my computer) a size of 16 Kilobyte or more,
but the MTU is only about 1.4 kilobyte.
I tried to fix the above if clause to the following:
if (i==0 && !bound) {
then indeed real "Mode B" packages get send, but the program then aborts at the
following place:
##############################<begin code>##################################
(line 1030)
//Step 3 decode CBPY I
cbpy_type_index = gst_rtp_h263_pay_decode_cbpy (context->window, cbpy_I);
GST_DEBUG ("CBPY index: %d", cbpy_type_index);
if (cbpy_type_index == -1) {
GST_ERROR ("CBPY index shouldn't be -1 in window: %08x",
context->window);
return NULL;
}
##############################<end code>###################################
It tries to decode a "0x0180" but in the cbpy_I table is no such code.
While looking for a reason of that I found something other strange:
##############################<begin code>#################################
(line 1206)
//check if the block has TCOEF
if (i > 3) {
ind = mcbpc_P[mb_type_index][i - 1];
} else {
if (mcbpc_P[mb_type_index][5] > 2) {
ind = cbpy_I[cbpy_type_index][i + 3];
} else {
ind = cbpy_P[cbpy_type_index][i + 3];
}
}
#############################<end code>####################################
It uses the table cbpy_I (the suffix _I means that it is for I-Frames), but it
is a in the else part relevant for only P-Frames.
--
Configure bugmail: https://bugzilla.gnome.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.
More information about the Gstreamer-bugs
mailing list