X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fimg2.c;h=48f3dfc4a55502644af667a63ecf392bd68e33a7;hb=7d7b8c32c9e158af2dbf40f44732091172f21d1a;hp=421a2c3b15a1121609f944657465b0bc0cefb891;hpb=c91662ce8323f7e9fabd10631eeffb9e49200583;p=ffmpeg diff --git a/libavformat/img2.c b/libavformat/img2.c index 421a2c3b15a..48f3dfc4a55 100644 --- a/libavformat/img2.c +++ b/libavformat/img2.c @@ -1,6 +1,6 @@ /* * Image format - * Copyright (c) 2000, 2001, 2002 Fabrice Bellard. + * Copyright (c) 2000, 2001, 2002 Fabrice Bellard * Copyright (c) 2004 Michael Niedermayer * * This file is part of FFmpeg. @@ -360,6 +360,29 @@ static int img_write_packet(AVFormatContext *s, AVPacket *pkt) 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 @@ AVOutputFormat image2_muxer = { "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,pcx,pgm,pgmyuv,png,ppm,sgi,tif,tiff,jp2", sizeof(VideoData), CODEC_ID_NONE, CODEC_ID_MJPEG,