mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-03-28 12:32:17 +02:00
avformat/swfenc: add support for muxing png images
Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
parent
041e735c81
commit
8d5f2a005d
@ -224,11 +224,12 @@ static int swf_write_header(AVFormatContext *s)
|
|||||||
}
|
}
|
||||||
if (par->codec_id == AV_CODEC_ID_VP6F ||
|
if (par->codec_id == AV_CODEC_ID_VP6F ||
|
||||||
par->codec_id == AV_CODEC_ID_FLV1 ||
|
par->codec_id == AV_CODEC_ID_FLV1 ||
|
||||||
|
par->codec_id == AV_CODEC_ID_PNG ||
|
||||||
par->codec_id == AV_CODEC_ID_MJPEG) {
|
par->codec_id == AV_CODEC_ID_MJPEG) {
|
||||||
swf->video_st = s->streams[i];
|
swf->video_st = s->streams[i];
|
||||||
swf->video_par = par;
|
swf->video_par = par;
|
||||||
} else {
|
} else {
|
||||||
av_log(s, AV_LOG_ERROR, "SWF muxer only supports VP6, FLV1 and MJPEG\n");
|
av_log(s, AV_LOG_ERROR, "SWF muxer only supports VP6, FLV1, PNG and MJPEG\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -257,7 +258,7 @@ static int swf_write_header(AVFormatContext *s)
|
|||||||
|
|
||||||
if (!strcmp("avm2", s->oformat->name))
|
if (!strcmp("avm2", s->oformat->name))
|
||||||
version = 9;
|
version = 9;
|
||||||
else if (swf->video_par && swf->video_par->codec_id == AV_CODEC_ID_VP6F)
|
else if (swf->video_par && (swf->video_par->codec_id == AV_CODEC_ID_VP6F || swf->video_par->codec_id == AV_CODEC_ID_PNG))
|
||||||
version = 8; /* version 8 and above support VP6 codec */
|
version = 8; /* version 8 and above support VP6 codec */
|
||||||
else if (swf->video_par && swf->video_par->codec_id == AV_CODEC_ID_FLV1)
|
else if (swf->video_par && swf->video_par->codec_id == AV_CODEC_ID_FLV1)
|
||||||
version = 6; /* version 6 and above support FLV1 codec */
|
version = 6; /* version 6 and above support FLV1 codec */
|
||||||
@ -285,7 +286,7 @@ static int swf_write_header(AVFormatContext *s)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* define a shape with the jpeg inside */
|
/* define a shape with the jpeg inside */
|
||||||
if (swf->video_par && swf->video_par->codec_id == AV_CODEC_ID_MJPEG) {
|
if (swf->video_par && (swf->video_par->codec_id == AV_CODEC_ID_MJPEG || swf->video_par->codec_id == AV_CODEC_ID_PNG)) {
|
||||||
put_swf_tag(s, TAG_DEFINESHAPE);
|
put_swf_tag(s, TAG_DEFINESHAPE);
|
||||||
|
|
||||||
avio_wl16(pb, SHAPE_ID); /* ID of shape */
|
avio_wl16(pb, SHAPE_ID); /* ID of shape */
|
||||||
@ -406,7 +407,7 @@ static int swf_write_video(AVFormatContext *s,
|
|||||||
avio_wl16(pb, swf->video_frame_number++);
|
avio_wl16(pb, swf->video_frame_number++);
|
||||||
avio_write(pb, buf, size);
|
avio_write(pb, buf, size);
|
||||||
put_swf_end_tag(s);
|
put_swf_end_tag(s);
|
||||||
} else if (par->codec_id == AV_CODEC_ID_MJPEG) {
|
} else if (par->codec_id == AV_CODEC_ID_MJPEG || par->codec_id == AV_CODEC_ID_PNG) {
|
||||||
if (swf->swf_frame_number > 0) {
|
if (swf->swf_frame_number > 0) {
|
||||||
/* remove the shape */
|
/* remove the shape */
|
||||||
put_swf_tag(s, TAG_REMOVEOBJECT);
|
put_swf_tag(s, TAG_REMOVEOBJECT);
|
||||||
@ -425,8 +426,9 @@ static int swf_write_video(AVFormatContext *s,
|
|||||||
avio_wl16(pb, BITMAP_ID); /* ID of the image */
|
avio_wl16(pb, BITMAP_ID); /* ID of the image */
|
||||||
|
|
||||||
/* a dummy jpeg header seems to be required */
|
/* a dummy jpeg header seems to be required */
|
||||||
avio_wb32(pb, 0xffd8ffd9);
|
if (par->codec_id == AV_CODEC_ID_MJPEG)
|
||||||
/* write the jpeg image */
|
avio_wb32(pb, 0xffd8ffd9);
|
||||||
|
/* write the jpeg/png image */
|
||||||
avio_write(pb, buf, size);
|
avio_write(pb, buf, size);
|
||||||
|
|
||||||
put_swf_end_tag(s);
|
put_swf_end_tag(s);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user