int av_packet_merge_side_data(AVPacket *pkt){ if(pkt->side_data_elems){ AVBufferRef *buf; int i; uint8_t *p; uint64_t size= pkt->size + 8LL + AV_INPUT_BUFFER_PADDING_SIZE; AVPacket old= *pkt; for (i=0; i<old.side_data_elems; i++) { size += old.side_data[i].size + 5LL; } if (size > INT_MAX) return AVERROR(EINVAL); buf = av_buffer_alloc(size); if (!buf) return AVERROR(ENOMEM); pkt->buf = buf; pkt->data = p = buf->data; pkt->size = size - AV_INPUT_BUFFER_PADDING_SIZE; bytestream_put_buffer(&p, old.data, old.size); for (i=old.side_data_elems-1; i>=0; i--) { bytestream_put_buffer(&p, old.side_data[i].data, old.side_data[i].size); bytestream_put_be32(&p, old.side_data[i].size); *p++ = old.side_data[i].type | ((i==old.side_data_elems-1)*128); } bytestream_put_be64(&p, FF_MERGE_MARKER); av_assert0(p-pkt->data == pkt->size); memset(p, 0, AV_INPUT_BUFFER_PADDING_SIZE); av_packet_unref(&old); pkt->side_data_elems = 0; pkt->side_data = NULL; return 1; } return 0; }
int av_packet_merge_side_data(AVPacket *pkt){ if(pkt->side_data_elems){ AVBufferRef *buf; int i; uint8_t *p; uint64_t size= pkt->size + 8LL + FF_INPUT_BUFFER_PADDING_SIZE; AVPacket old= *pkt; for (i=0; i<old.side_data_elems; i++) { size += old.side_data[i].size + 5LL; } if (size > INT_MAX) return AVERROR(EINVAL); buf = av_buffer_alloc(size); if (!buf) return AVERROR(ENOMEM); pkt->buf = buf; pkt->data = p = buf->data; #if FF_API_DESTRUCT_PACKET FF_DISABLE_DEPRECATION_WARNINGS pkt->destruct = dummy_destruct_packet; FF_ENABLE_DEPRECATION_WARNINGS #endif pkt->size = size - FF_INPUT_BUFFER_PADDING_SIZE; bytestream_put_buffer(&p, old.data, old.size); for (i=old.side_data_elems-1; i>=0; i--) { bytestream_put_buffer(&p, old.side_data[i].data, old.side_data[i].size); bytestream_put_be32(&p, old.side_data[i].size); *p++ = old.side_data[i].type | ((i==old.side_data_elems-1)*128); } bytestream_put_be64(&p, FF_MERGE_MARKER); av_assert0(p-pkt->data == pkt->size); memset(p, 0, FF_INPUT_BUFFER_PADDING_SIZE); av_free_packet(&old); pkt->side_data_elems = 0; pkt->side_data = NULL; return 1; } return 0; }
void ff_amf_write_number(uint8_t **dst, double val) { bytestream_put_byte(dst, AMF_DATA_TYPE_NUMBER); bytestream_put_be64(dst, av_dbl2int(val)); }