|
|
|
@ -25,6 +25,7 @@ |
|
|
|
|
#include "avio_internal.h" |
|
|
|
|
#include "internal.h" |
|
|
|
|
#include "libavcodec/internal.h" |
|
|
|
|
#include "libavcodec/bytestream.h" |
|
|
|
|
#include "libavutil/opt.h" |
|
|
|
|
#include "libavutil/dict.h" |
|
|
|
|
#include "libavutil/pixdesc.h" |
|
|
|
@ -4017,3 +4018,45 @@ int avformat_network_deinit(void) |
|
|
|
|
#endif |
|
|
|
|
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 (channels) { |
|
|
|
|
size += 4; |
|
|
|
|
flags |= AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT; |
|
|
|
|
} |
|
|
|
|
if (channel_layout) { |
|
|
|
|
size += 8; |
|
|
|
|
flags |= AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT; |
|
|
|
|
} |
|
|
|
|
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 (channels) |
|
|
|
|
bytestream_put_le32(&data, channels); |
|
|
|
|
if (channel_layout) |
|
|
|
|
bytestream_put_le64(&data, channel_layout); |
|
|
|
|
if (sample_rate) |
|
|
|
|
bytestream_put_le32(&data, sample_rate); |
|
|
|
|
if (width || height) { |
|
|
|
|
bytestream_put_le32(&data, width); |
|
|
|
|
bytestream_put_le32(&data, height); |
|
|
|
|
} |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|