X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Favpacket.c;h=10be9d53b8db44bf7498cbb73325b1504777e7f9;hb=f01e3c5d000d264b2935e186594a37a3c00f9465;hp=aae67c5a008377a8b810eb2436e3f2a8dd511e1c;hpb=bc3f19641ce37d14f9cfd7e2693c4833b63fba7d;p=ffmpeg diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c index aae67c5a008..10be9d53b8d 100644 --- a/libavcodec/avpacket.c +++ b/libavcodec/avpacket.c @@ -68,14 +68,14 @@ FF_ENABLE_DEPRECATION_WARNINGS static int packet_alloc(AVBufferRef **buf, int size) { int ret; - if ((unsigned)size >= (unsigned)size + FF_INPUT_BUFFER_PADDING_SIZE) + if ((unsigned)size >= (unsigned)size + AV_INPUT_BUFFER_PADDING_SIZE) return AVERROR(EINVAL); - ret = av_buffer_realloc(buf, size + FF_INPUT_BUFFER_PADDING_SIZE); + ret = av_buffer_realloc(buf, size + AV_INPUT_BUFFER_PADDING_SIZE); if (ret < 0) return ret; - memset((*buf)->data + size, 0, FF_INPUT_BUFFER_PADDING_SIZE); + memset((*buf)->data + size, 0, AV_INPUT_BUFFER_PADDING_SIZE); return 0; } @@ -105,20 +105,20 @@ void av_shrink_packet(AVPacket *pkt, int size) if (pkt->size <= size) return; pkt->size = size; - memset(pkt->data + size, 0, FF_INPUT_BUFFER_PADDING_SIZE); + memset(pkt->data + size, 0, AV_INPUT_BUFFER_PADDING_SIZE); } int av_grow_packet(AVPacket *pkt, int grow_by) { int new_size; - av_assert0((unsigned)pkt->size <= INT_MAX - FF_INPUT_BUFFER_PADDING_SIZE); + av_assert0((unsigned)pkt->size <= INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE); if (!pkt->size) return av_new_packet(pkt, grow_by); if ((unsigned)grow_by > - INT_MAX - (pkt->size + FF_INPUT_BUFFER_PADDING_SIZE)) + INT_MAX - (pkt->size + AV_INPUT_BUFFER_PADDING_SIZE)) return -1; - new_size = pkt->size + grow_by + FF_INPUT_BUFFER_PADDING_SIZE; + new_size = pkt->size + grow_by + AV_INPUT_BUFFER_PADDING_SIZE; if (pkt->buf) { int ret = av_buffer_realloc(&pkt->buf, new_size); if (ret < 0) @@ -136,17 +136,17 @@ FF_ENABLE_DEPRECATION_WARNINGS } pkt->data = pkt->buf->data; pkt->size += grow_by; - memset(pkt->data + pkt->size, 0, FF_INPUT_BUFFER_PADDING_SIZE); + memset(pkt->data + pkt->size, 0, AV_INPUT_BUFFER_PADDING_SIZE); return 0; } int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size) { - if (size >= INT_MAX - FF_INPUT_BUFFER_PADDING_SIZE) + if (size >= INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE) return AVERROR(EINVAL); - pkt->buf = av_buffer_create(data, size + FF_INPUT_BUFFER_PADDING_SIZE, + pkt->buf = av_buffer_create(data, size + AV_INPUT_BUFFER_PADDING_SIZE, av_buffer_default_free, NULL, 0); if (!pkt->buf) return AVERROR(ENOMEM); @@ -174,9 +174,9 @@ do { \ void *data; \ if (padding) { \ if ((unsigned)(size) > \ - (unsigned)(size) + FF_INPUT_BUFFER_PADDING_SIZE) \ + (unsigned)(size) + AV_INPUT_BUFFER_PADDING_SIZE) \ goto failed_alloc; \ - ALLOC(data, size + FF_INPUT_BUFFER_PADDING_SIZE); \ + ALLOC(data, size + AV_INPUT_BUFFER_PADDING_SIZE); \ } else { \ ALLOC(data, size); \ } \ @@ -185,7 +185,7 @@ do { \ memcpy(data, src, size); \ if (padding) \ memset((uint8_t *)data + size, 0, \ - FF_INPUT_BUFFER_PADDING_SIZE); \ + AV_INPUT_BUFFER_PADDING_SIZE); \ dst = data; \ } while (0) @@ -303,7 +303,7 @@ uint8_t *av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, if ((unsigned)elems + 1 > INT_MAX / sizeof(*pkt->side_data)) return NULL; - if ((unsigned)size > INT_MAX - FF_INPUT_BUFFER_PADDING_SIZE) + if ((unsigned)size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE) return NULL; pkt->side_data = av_realloc(pkt->side_data, @@ -311,7 +311,7 @@ uint8_t *av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, if (!pkt->side_data) return NULL; - pkt->side_data[elems].data = av_mallocz(size + FF_INPUT_BUFFER_PADDING_SIZE); + pkt->side_data[elems].data = av_mallocz(size + AV_INPUT_BUFFER_PADDING_SIZE); if (!pkt->side_data[elems].data) return NULL; pkt->side_data[elems].size = size; @@ -366,7 +366,7 @@ int av_packet_merge_side_data(AVPacket *pkt){ AVBufferRef *buf; int i; uint8_t *p; - uint64_t size= pkt->size + 8LL + FF_INPUT_BUFFER_PADDING_SIZE; + uint64_t size= pkt->size + 8LL + AV_INPUT_BUFFER_PADDING_SIZE; AVPacket old= *pkt; for (i=0; idestruct = dummy_destruct_packet; FF_ENABLE_DEPRECATION_WARNINGS #endif - pkt->size = size - FF_INPUT_BUFFER_PADDING_SIZE; + 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); @@ -392,7 +392,7 @@ FF_ENABLE_DEPRECATION_WARNINGS } bytestream_put_be64(&p, FF_MERGE_MARKER); av_assert0(p-pkt->data == pkt->size); - memset(p, 0, FF_INPUT_BUFFER_PADDING_SIZE); + memset(p, 0, AV_INPUT_BUFFER_PADDING_SIZE); av_free_packet(&old); pkt->side_data_elems = 0; pkt->side_data = NULL; @@ -425,7 +425,7 @@ int av_packet_split_side_data(AVPacket *pkt){ for (i=0; ; i++){ size= AV_RB32(p); av_assert0(size<=INT_MAX && p - pkt->data >= size); - pkt->side_data[i].data = av_mallocz(size + FF_INPUT_BUFFER_PADDING_SIZE); + pkt->side_data[i].data = av_mallocz(size + AV_INPUT_BUFFER_PADDING_SIZE); pkt->side_data[i].size = size; pkt->side_data[i].type = p[4]&127; if (!pkt->side_data[i].data) @@ -602,3 +602,28 @@ void av_packet_rescale_ts(AVPacket *pkt, AVRational src_tb, AVRational dst_tb) if (pkt->convergence_duration > 0) pkt->convergence_duration = av_rescale_q(pkt->convergence_duration, src_tb, dst_tb); } + +int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, int error_count, int pict_type) +{ + uint8_t *side_data; + int side_data_size; + int i; + + side_data = av_packet_get_side_data(pkt, AV_PKT_DATA_QUALITY_STATS, &side_data_size); + if (!side_data) { + side_data_size = 4+4+8*error_count; + side_data = av_packet_new_side_data(pkt, AV_PKT_DATA_QUALITY_STATS, + side_data_size); + } + + if (!side_data || side_data_size < 4+4+8*error_count) + return AVERROR(ENOMEM); + + AV_WL32(side_data , quality ); + side_data[4] = pict_type; + side_data[5] = error_count; + for (i = 0; i