[FFmpeg-devel] Possible bug in h264.c ff_h264_decode_nal
David R Robison
drrobison at openroadsconsulting.com
Wed Nov 7 13:13:16 CET 2012
I am trying to play video from a Pelco camera and it is not decoding right. It appears that the entire SPS is not being parsed. In the h264.c file the ff_h264_decode_nal function the following is defined.
#define STARTCODE_TEST \
if (i + 2 < length && src[i + 1] == 0 && src[i + 2] <= 3) { \
if (src[i + 2] != 3) { \
/* startcode, so we must be past the end */ \
length = i; \
} \
break; \
}
However, it seems to me from the documentation that the start code will either end with a 1 or a 3. If I change the function to
#define STARTCODE_TEST \
if (i + 2 < length && src[i + 1] == 0 && (src[i + 2] == 1 ||
src[i + 2] == 3)) { \
if (src[i + 2] != 3) { \
/* startcode, so we must be past the end */ \
length = i; \
} \
break; \
}
Then my video plays fine. Any thoughts on this? Here is the patch file:
Index: ffmpeg/libavcodec/h264.c
===================================================================
--- ffmpeg/libavcodec/h264.c (revision 4489)
+++ ffmpeg/libavcodec/h264.c (working copy)
@@ -178,7 +178,7 @@
length--;
#define STARTCODE_TEST \
- if (i + 2 < length && src[i + 1] == 0 && src[i + 2] <= 3) { \
+ if (i + 2 < length && src[i + 1] == 0 && (src[i + 2] == 1 ||
src[i + 2] == 3)) { \
if (src[i + 2] != 3) { \
/* startcode, so we must be past the end */ \
length = i; \
One more piece of information. In speaking with the company that makes our RTSP library, they stated that they remove the emulation prevention bytes from the data it copies into the media type. When they leave them in it seems to play. However, it make me wonder if this patch is still valid for ffmpeg.
Any thoughts?
David
--
David R Robison
Open Roads Consulting, Inc.
103 Watson Road, Chesapeake, VA 23320
phone: (757) 546-3401
e-mail: drrobison at openroadsconsulting.com
web: http://openroadsconsulting.com
blog: http://therobe.blogspot.com
book: http://www.xulonpress.com/bookstore/bookdetail.php?PB_ISBN=9781597816526
This email communication (including any attachments) may contain confidential and/or privileged material intended solely for the individual or entity to which it is addressed.
If you are not the intended recipient, please delete this email immediately.
More information about the ffmpeg-devel
mailing list