Only demuxers have a need to add side-data to a packet.
Unified · Split
| @@ -203,4 +203,12 @@ AVChapter *avpriv_new_chapter(AVFormatContext *s, int64_t id, AVRational time_ba · 202 unmodified lines | ||
| 203 | 203 | int ff_add_attached_pic(AVFormatContext *s, AVStream *st, AVIOContext *pb, |
| 204 | 204 | AVBufferRef **buf, int size); |
| 205 | 205 | |
| 206 | +/** | |
| 207 | + * Add side data to a packet for changing parameters to the given values. | |
| 208 | + * Parameters set to 0 aren't included in the change. | |
| 209 | + */ | |
| 210 | +int ff_add_param_change(AVPacket *pkt, int32_t channels, | |
| 211 | + uint64_t channel_layout, int32_t sample_rate, | |
| 212 | + int32_t width, int32_t height); | |
| 213 | + | |
| 206 | 214 | #endif /* AVFORMAT_DEMUX_H */ |
| @@ -19,7 +19,10 @@ · 18 unmodified lines | ||
| 19 | 19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
| 20 | 20 | */ |
| 21 | 21 | |
| 22 | +#include "libavutil/version.h" | |
| 23 | + | |
| 22 | 24 | #include "libavutil/avassert.h" |
| 25 | +#include "libavcodec/bytestream.h" | |
| 23 | 26 | #include "libavcodec/packet_internal.h" |
| 24 | 27 | #include "avformat.h" |
| 25 | 28 | #include "demux.h" |
| @@ -143,3 +146,54 @@ fail: · 117 unmodified lines | ||
| 143 | 146 | ff_remove_stream(s, st); |
| 144 | 147 | return ret; |
| 145 | 148 | } |
| 149 | + | |
| 150 | +int ff_add_param_change(AVPacket *pkt, int32_t channels, | |
| 151 | + uint64_t channel_layout, int32_t sample_rate, | |
| 152 | + int32_t width, int32_t height) | |
| 153 | +{ | |
| 154 | + uint32_t flags = 0; | |
| 155 | + int size = 4; | |
| 156 | + uint8_t *data; | |
| 157 | + if (!pkt) | |
| 158 | + return AVERROR(EINVAL); | |
| 159 | + | |
| 160 | +#if FF_API_OLD_CHANNEL_LAYOUT | |
| 161 | +FF_DISABLE_DEPRECATION_WARNINGS | |
| 162 | + if (channels) { | |
| 163 | + size += 4; | |
| 164 | + flags |= AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT; | |
| 165 | + } | |
| 166 | + if (channel_layout) { | |
| 167 | + size += 8; | |
| 168 | + flags |= AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT; | |
| 169 | + } | |
| 170 | +FF_ENABLE_DEPRECATION_WARNINGS | |
| 171 | +#endif | |
| 172 | + if (sample_rate) { | |
| 173 | + size += 4; | |
| 174 | + flags |= AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE; | |
| 175 | + } | |
| 176 | + if (width || height) { | |
| 177 | + size += 8; | |
| 178 | + flags |= AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS; | |
| 179 | + } | |
| 180 | + data = av_packet_new_side_data(pkt, AV_PKT_DATA_PARAM_CHANGE, size); | |
| 181 | + if (!data) | |
| 182 | + return AVERROR(ENOMEM); | |
| 183 | + bytestream_put_le32(&data, flags); | |
| 184 | +#if FF_API_OLD_CHANNEL_LAYOUT | |
| 185 | +FF_DISABLE_DEPRECATION_WARNINGS | |
| 186 | + if (channels) | |
| 187 | + bytestream_put_le32(&data, channels); | |
| 188 | + if (channel_layout) | |
| 189 | + bytestream_put_le64(&data, channel_layout); | |
| 190 | +FF_ENABLE_DEPRECATION_WARNINGS | |
| 191 | +#endif | |
| 192 | + if (sample_rate) | |
| 193 | + bytestream_put_le32(&data, sample_rate); | |
| 194 | + if (width || height) { | |
| 195 | + bytestream_put_le32(&data, width); | |
| 196 | + bytestream_put_le32(&data, height); | |
| 197 | + } | |
| 198 | + return 0; | |
| 199 | +} | |
| @@ -34,6 +34,7 @@ · 33 unmodified lines | ||
| 34 | 34 | #include "libavutil/intreadwrite.h" |
| 35 | 35 | #include "libavutil/mathematics.h" |
| 36 | 36 | #include "avformat.h" |
| 37 | +#include "demux.h" | |
| 37 | 38 | #include "internal.h" |
| 38 | 39 | #include "flv.h" |
| 39 | 40 | |
| @@ -584,14 +584,6 @@ const AVCodec *ff_find_decoder(AVFormatContext *s, const AVStream *st, · 583 unmodified lines | ||
| 584 | 584 | void avpriv_set_pts_info(AVStream *st, int pts_wrap_bits, |
| 585 | 585 | unsigned int pts_num, unsigned int pts_den); |
| 586 | 586 | |
| 587 | −/** | |
| 588 | − * Add side data to a packet for changing parameters to the given values. | |
| 589 | − * Parameters set to 0 aren't included in the change. | |
| 590 | − */ | |
| 591 | −int ff_add_param_change(AVPacket *pkt, int32_t channels, | |
| 592 | − uint64_t channel_layout, int32_t sample_rate, | |
| 593 | − int32_t width, int32_t height); | |
| 594 | − | |
| 595 | 587 | /** |
| 596 | 588 | * Set the timebase for each stream from the corresponding codec timebase and |
| 597 | 589 | * print it. |
| @@ -35,6 +35,7 @@ · 34 unmodified lines | ||
| 35 | 35 | #include "libavutil/channel_layout.h" |
| 36 | 36 | #include "libavutil/intreadwrite.h" |
| 37 | 37 | #include "avformat.h" |
| 38 | +#include "demux.h" | |
| 38 | 39 | #include "internal.h" |
| 39 | 40 | |
| 40 | 41 | #define CHUNK_PREAMBLE_SIZE 4 |
| @@ -32,6 +32,7 @@ · 31 unmodified lines | ||
| 32 | 32 | #include "libavutil/internal.h" |
| 33 | 33 | #include "libavutil/intreadwrite.h" |
| 34 | 34 | #include "libavcodec/get_bits.h" |
| 35 | +#include "demux.h" | |
| 35 | 36 | #include "swf.h" |
| 36 | 37 | #include "flv.h" |
| 37 | 38 | |
| @@ -28,13 +28,13 @@ · 27 unmodified lines | ||
| 28 | 28 | #include "libavutil/bprint.h" |
| 29 | 29 | #include "libavutil/dict.h" |
| 30 | 30 | #include "libavutil/internal.h" |
| 31 | +#include "libavutil/intreadwrite.h" | |
| 31 | 32 | #include "libavutil/opt.h" |
| 32 | 33 | #include "libavutil/pixfmt.h" |
| 33 | 34 | #include "libavutil/thread.h" |
| 34 | 35 | #include "libavutil/time.h" |
| 35 | 36 | |
| 36 | 37 | #include "libavcodec/bsf.h" |
| 37 | −#include "libavcodec/bytestream.h" | |
| 38 | 38 | #include "libavcodec/internal.h" |
| 39 | 39 | #include "libavcodec/packet_internal.h" |
| 40 | 40 | |
| @@ -1007,57 +1007,6 @@ int avformat_network_deinit(void) · 966 unmodified lines | ||
| 1007 | 1007 | return 0; |
| 1008 | 1008 | } |
| 1009 | 1009 | |
| 1010 | −int ff_add_param_change(AVPacket *pkt, int32_t channels, | |
| 1011 | − uint64_t channel_layout, int32_t sample_rate, | |
| 1012 | − int32_t width, int32_t height) | |
| 1013 | −{ | |
| 1014 | − uint32_t flags = 0; | |
| 1015 | − int size = 4; | |
| 1016 | − uint8_t *data; | |
| 1017 | − if (!pkt) | |
| 1018 | − return AVERROR(EINVAL); | |
| 1019 | − | |
| 1020 | −#if FF_API_OLD_CHANNEL_LAYOUT | |
| 1021 | −FF_DISABLE_DEPRECATION_WARNINGS | |
| 1022 | − if (channels) { | |
| 1023 | − size += 4; | |
| 1024 | − flags |= AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT; | |
| 1025 | − } | |
| 1026 | − if (channel_layout) { | |
| 1027 | − size += 8; | |
| 1028 | − flags |= AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT; | |
| 1029 | − } | |
| 1030 | −FF_ENABLE_DEPRECATION_WARNINGS | |
| 1031 | −#endif | |
| 1032 | − if (sample_rate) { | |
| 1033 | − size += 4; | |
| 1034 | − flags |= AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE; | |
| 1035 | − } | |
| 1036 | − if (width || height) { | |
| 1037 | − size += 8; | |
| 1038 | − flags |= AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS; | |
| 1039 | − } | |
| 1040 | − data = av_packet_new_side_data(pkt, AV_PKT_DATA_PARAM_CHANGE, size); | |
| 1041 | − if (!data) | |
| 1042 | − return AVERROR(ENOMEM); | |
| 1043 | − bytestream_put_le32(&data, flags); | |
| 1044 | −#if FF_API_OLD_CHANNEL_LAYOUT | |
| 1045 | −FF_DISABLE_DEPRECATION_WARNINGS | |
| 1046 | − if (channels) | |
| 1047 | − bytestream_put_le32(&data, channels); | |
| 1048 | − if (channel_layout) | |
| 1049 | − bytestream_put_le64(&data, channel_layout); | |
| 1050 | −FF_ENABLE_DEPRECATION_WARNINGS | |
| 1051 | −#endif | |
| 1052 | − if (sample_rate) | |
| 1053 | − bytestream_put_le32(&data, sample_rate); | |
| 1054 | − if (width || height) { | |
| 1055 | − bytestream_put_le32(&data, width); | |
| 1056 | − bytestream_put_le32(&data, height); | |
| 1057 | − } | |
| 1058 | − return 0; | |
| 1059 | −} | |
| 1060 | − | |
| 1061 | 1010 | AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *stream, AVFrame *frame) |
| 1062 | 1011 | { |
| 1063 | 1012 | AVRational undef = {0, 1}; |