Add a libavformat internal function ff_write_chained

Originally committed as revision 23207 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Martin Storsjö 2010-05-21 07:07:57 +00:00
parent 6531b5c9f4
commit 9a76125069
2 changed files with 33 additions and 0 deletions

View File

@ -154,4 +154,18 @@ int ff_url_join(char *str, int size, const char *proto,
void ff_sdp_write_media(char *buff, int size, AVCodecContext *c,
const char *dest_addr, int port, int ttl);
/**
* Write a packet to another muxer than the one the user originally
* intended. Useful when chaining muxers, where one muxer internally
* writes a received packet to another muxer.
*
* @param dst the muxer to write the packet to
* @param dst_stream the stream index within dst to write the packet to
* @param pkt the packet to be written
* @param src the muxer the packet originally was intended for
* @return the value av_write_frame returned
*/
int ff_write_chained(AVFormatContext *dst, int dst_stream, AVPacket *pkt,
AVFormatContext *src);
#endif /* AVFORMAT_INTERNAL_H */

View File

@ -3591,3 +3591,22 @@ int ff_url_join(char *str, int size, const char *proto,
}
return strlen(str);
}
int ff_write_chained(AVFormatContext *dst, int dst_stream, AVPacket *pkt,
AVFormatContext *src)
{
AVPacket local_pkt;
local_pkt = *pkt;
local_pkt.stream_index = dst_stream;
if (pkt->pts != AV_NOPTS_VALUE)
local_pkt.pts = av_rescale_q(pkt->pts,
src->streams[pkt->stream_index]->time_base,
dst->streams[dst_stream]->time_base);
if (pkt->dts != AV_NOPTS_VALUE)
local_pkt.dts = av_rescale_q(pkt->dts,
src->streams[pkt->stream_index]->time_base,
dst->streams[dst_stream]->time_base);
return av_write_frame(dst, &local_pkt);
}