On Tue, Dec 08, 2015 at 02:10:32PM +0200, Andrey Utkin wrote: > This enables us to process pics larger than 2040 pixels in dimensions, > overcoming the limitation of RFC 2435. > > Signed-off-by: Andrey Utkin <andrey.ut...@corp.bluecherry.net> > --- > libavformat/rtpdec_jpeg.c | 46 +++++++++++++++++++++++++++++++++++++++++++--- > 1 file changed, 43 insertions(+), 3 deletions(-) > > diff --git a/libavformat/rtpdec_jpeg.c b/libavformat/rtpdec_jpeg.c > index 6bf88f8..0a83468 100644 > --- a/libavformat/rtpdec_jpeg.c > +++ b/libavformat/rtpdec_jpeg.c > @@ -24,9 +24,11 @@ > #include "rtpdec.h" > #include "rtpdec_formats.h" > #include "libavutil/intreadwrite.h" > +#include "libavutil/avstring.h" > #include "libavcodec/jpegtables.h" > #include "libavcodec/mjpeg.h" > #include "libavcodec/bytestream.h" > +#include "libavformat/rtpdec_formats.h" > > /** > * RTP/JPEG specific private data. > @@ -35,6 +37,14 @@ struct PayloadContext { > AVIOContext *frame; ///< current frame buffer > uint32_t timestamp; ///< current frame timestamp > int hdr_size; ///< size of the current frame header > + /** > + * Flag, shows whether we got framesize explicitly from SDP. > + * If set, override dimensions from RTP header. > + * Workaround for dimensions larger than 2040 (limitation of RFC 2435). > + */ > + int sdp_framesize_set; > + int sdp_width; > + int sdp_height; > uint8_t qtables[128][128]; > uint8_t qtables_len[128]; > }; > @@ -215,7 +225,8 @@ static int jpeg_parse_packet(AVFormatContext *ctx, > PayloadContext *jpeg, > const uint8_t *buf, int len, uint16_t seq, > int flags) > { > - uint8_t type, q, width, height; > + uint8_t type, q; > + uint32_t width, height; > const uint8_t *qtables = NULL; > uint16_t qtable_len; > uint32_t off;
> @@ -230,8 +241,13 @@ static int jpeg_parse_packet(AVFormatContext *ctx, > PayloadContext *jpeg, > off = AV_RB24(buf + 1); /* fragment byte offset */ > type = AV_RB8(buf + 4); /* id of jpeg decoder params */ > q = AV_RB8(buf + 5); /* quantization factor (or table id) */ > - width = AV_RB8(buf + 6); /* frame width in 8 pixel blocks */ > - height = AV_RB8(buf + 7); /* frame height in 8 pixel blocks */ > + if (jpeg->sdp_framesize_set) { > + width = FF_CEIL_RSHIFT(jpeg->sdp_width, 3); > + height = FF_CEIL_RSHIFT(jpeg->sdp_height, 3); i dont think the lowest 3 bits should be discarded [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Awnsering whenever a program halts or runs forever is On a turing machine, in general impossible (turings halting problem). On any real computer, always possible as a real computer has a finite number of states N, and will either halt in less than N cycles or never halt.
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel