diff --git a/libavformat/demux.h b/libavformat/demux.h index 546569ae6a..03f7c22bdd 100644 --- a/libavformat/demux.h +++ b/libavformat/demux.h @@ -203,4 +203,12 @@ AVChapter *avpriv_new_chapter(AVFormatContext *s, int64_t id, AVRational time_ba int ff_add_attached_pic(AVFormatContext *s, AVStream *st, AVIOContext *pb, AVBufferRef **buf, int size); +/** + * Add side data to a packet for changing parameters to the given values. + * Parameters set to 0 aren't included in the change. + */ +int ff_add_param_change(AVPacket *pkt, int32_t channels, + uint64_t channel_layout, int32_t sample_rate, + int32_t width, int32_t height); + #endif /* AVFORMAT_DEMUX_H */ diff --git a/libavformat/demux_utils.c b/libavformat/demux_utils.c index 1fd634d1a2..ffcadc1900 100644 --- a/libavformat/demux_utils.c +++ b/libavformat/demux_utils.c @@ -19,7 +19,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "libavutil/version.h" + #include "libavutil/avassert.h" +#include "libavcodec/bytestream.h" #include "libavcodec/packet_internal.h" #include "avformat.h" #include "demux.h" @@ -143,3 +146,54 @@ fail: ff_remove_stream(s, st); return ret; } + +int ff_add_param_change(AVPacket *pkt, int32_t channels, + uint64_t channel_layout, int32_t sample_rate, + int32_t width, int32_t height) +{ + uint32_t flags = 0; + int size = 4; + uint8_t *data; + if (!pkt) + return AVERROR(EINVAL); + +#if FF_API_OLD_CHANNEL_LAYOUT +FF_DISABLE_DEPRECATION_WARNINGS + if (channels) { + size += 4; + flags |= AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT; + } + if (channel_layout) { + size += 8; + flags |= AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT; + } +FF_ENABLE_DEPRECATION_WARNINGS +#endif + if (sample_rate) { + size += 4; + flags |= AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE; + } + if (width || height) { + size += 8; + flags |= AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS; + } + data = av_packet_new_side_data(pkt, AV_PKT_DATA_PARAM_CHANGE, size); + if (!data) + return AVERROR(ENOMEM); + bytestream_put_le32(&data, flags); +#if FF_API_OLD_CHANNEL_LAYOUT +FF_DISABLE_DEPRECATION_WARNINGS + if (channels) + bytestream_put_le32(&data, channels); + if (channel_layout) + bytestream_put_le64(&data, channel_layout); +FF_ENABLE_DEPRECATION_WARNINGS +#endif + if (sample_rate) + bytestream_put_le32(&data, sample_rate); + if (width || height) { + bytestream_put_le32(&data, width); + bytestream_put_le32(&data, height); + } + return 0; +} diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c index 0c90748422..c5d3c63bd0 100644 --- a/libavformat/flvdec.c +++ b/libavformat/flvdec.c @@ -34,6 +34,7 @@ #include "libavutil/intreadwrite.h" #include "libavutil/mathematics.h" #include "avformat.h" +#include "demux.h" #include "internal.h" #include "flv.h" diff --git a/libavformat/internal.h b/libavformat/internal.h index 4d80501eac..cd6240b0a3 100644 --- a/libavformat/internal.h +++ b/libavformat/internal.h @@ -584,14 +584,6 @@ const AVCodec *ff_find_decoder(AVFormatContext *s, const AVStream *st, void avpriv_set_pts_info(AVStream *st, int pts_wrap_bits, unsigned int pts_num, unsigned int pts_den); -/** - * Add side data to a packet for changing parameters to the given values. - * Parameters set to 0 aren't included in the change. - */ -int ff_add_param_change(AVPacket *pkt, int32_t channels, - uint64_t channel_layout, int32_t sample_rate, - int32_t width, int32_t height); - /** * Set the timebase for each stream from the corresponding codec timebase and * print it. diff --git a/libavformat/ipmovie.c b/libavformat/ipmovie.c index 793f1f6fee..4f5c164d3f 100644 --- a/libavformat/ipmovie.c +++ b/libavformat/ipmovie.c @@ -35,6 +35,7 @@ #include "libavutil/channel_layout.h" #include "libavutil/intreadwrite.h" #include "avformat.h" +#include "demux.h" #include "internal.h" #define CHUNK_PREAMBLE_SIZE 4 diff --git a/libavformat/swfdec.c b/libavformat/swfdec.c index 52c5e5c480..716c95a743 100644 --- a/libavformat/swfdec.c +++ b/libavformat/swfdec.c @@ -32,6 +32,7 @@ #include "libavutil/internal.h" #include "libavutil/intreadwrite.h" #include "libavcodec/get_bits.h" +#include "demux.h" #include "swf.h" #include "flv.h" diff --git a/libavformat/utils.c b/libavformat/utils.c index 9e2e3335ac..5249607745 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -28,13 +28,13 @@ #include "libavutil/bprint.h" #include "libavutil/dict.h" #include "libavutil/internal.h" +#include "libavutil/intreadwrite.h" #include "libavutil/opt.h" #include "libavutil/pixfmt.h" #include "libavutil/thread.h" #include "libavutil/time.h" #include "libavcodec/bsf.h" -#include "libavcodec/bytestream.h" #include "libavcodec/internal.h" #include "libavcodec/packet_internal.h" @@ -1007,57 +1007,6 @@ int avformat_network_deinit(void) return 0; } -int ff_add_param_change(AVPacket *pkt, int32_t channels, - uint64_t channel_layout, int32_t sample_rate, - int32_t width, int32_t height) -{ - uint32_t flags = 0; - int size = 4; - uint8_t *data; - if (!pkt) - return AVERROR(EINVAL); - -#if FF_API_OLD_CHANNEL_LAYOUT -FF_DISABLE_DEPRECATION_WARNINGS - if (channels) { - size += 4; - flags |= AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT; - } - if (channel_layout) { - size += 8; - flags |= AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT; - } -FF_ENABLE_DEPRECATION_WARNINGS -#endif - if (sample_rate) { - size += 4; - flags |= AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE; - } - if (width || height) { - size += 8; - flags |= AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS; - } - data = av_packet_new_side_data(pkt, AV_PKT_DATA_PARAM_CHANGE, size); - if (!data) - return AVERROR(ENOMEM); - bytestream_put_le32(&data, flags); -#if FF_API_OLD_CHANNEL_LAYOUT -FF_DISABLE_DEPRECATION_WARNINGS - if (channels) - bytestream_put_le32(&data, channels); - if (channel_layout) - bytestream_put_le64(&data, channel_layout); -FF_ENABLE_DEPRECATION_WARNINGS -#endif - if (sample_rate) - bytestream_put_le32(&data, sample_rate); - if (width || height) { - bytestream_put_le32(&data, width); - bytestream_put_le32(&data, height); - } - return 0; -} - AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *stream, AVFrame *frame) { AVRational undef = {0, 1};