Mercurial > libavformat.hg
changeset 4247:54271b8b5e00 libavformat
add jp2 formater in image2 muxer
author | bcoudurier |
---|---|
date | Sun, 18 Jan 2009 01:48:14 +0000 |
parents | e7d360560ada |
children | 6e4ce186db2e |
files | img2.c |
diffstat | 1 files changed, 24 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/img2.c Sun Jan 18 00:47:46 2009 +0000 +++ b/img2.c Sun Jan 18 01:48:14 2009 +0000 @@ -360,6 +360,29 @@ url_fclose(pb[1]); url_fclose(pb[2]); }else{ + if(av_str2id(img_tags, s->filename) == CODEC_ID_JPEG2000){ + AVStream *st = s->streams[0]; + if(st->codec->extradata_size > 8 && + AV_RL32(st->codec->extradata+4) == MKTAG('j','p','2','h')){ + if(pkt->size < 8 || AV_RL32(pkt->data+4) != MKTAG('j','p','2','c')) + goto error; + put_be32(pb[0], 12); + put_tag (pb[0], "jP "); + put_be32(pb[0], 0x0D0A870A); // signature + put_be32(pb[0], 20); + put_tag (pb[0], "ftyp"); + put_tag (pb[0], "jp2 "); + put_be32(pb[0], 0); + put_tag (pb[0], "jp2 "); + put_buffer(pb[0], st->codec->extradata, st->codec->extradata_size); + }else if(pkt->size < 8 || + (!st->codec->extradata_size && + AV_RL32(pkt->data+4) != MKTAG('j','P',' ',' '))){ // signature + error: + av_log(s, AV_LOG_ERROR, "malformated jpeg2000 codestream\n"); + return -1; + } + } put_buffer(pb[0], pkt->data, pkt->size); } put_flush_packet(pb[0]); @@ -405,7 +428,7 @@ "image2", NULL_IF_CONFIG_SMALL("image2 sequence"), "", - "bmp,jpeg,jpg,ljpg,pam,pbm,pgm,pgmyuv,png,ppm,sgi,tif,tiff", + "bmp,jpeg,jpg,ljpg,pam,pbm,pgm,pgmyuv,png,ppm,sgi,tif,tiff,jp2", sizeof(VideoData), CODEC_ID_NONE, CODEC_ID_MJPEG,