aviobuf: Add functions for null buffers
Null buffers are useful for simulating writing to a real buffer for the sake of measuring how many bytes are written. Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
bb461370e3
commit
3627ce2f1d
libavformat
@ -119,4 +119,22 @@ int ffio_open_dyn_packet_buf(AVIOContext **s, int max_packet_size);
|
|||||||
*/
|
*/
|
||||||
int ffio_fdopen(AVIOContext **s, URLContext *h);
|
int ffio_fdopen(AVIOContext **s, URLContext *h);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open a write-only fake memory stream. The written data is not stored
|
||||||
|
* anywhere - this is only used for measuring the amount of data
|
||||||
|
* written.
|
||||||
|
*
|
||||||
|
* @param s new IO context
|
||||||
|
* @return zero if no error.
|
||||||
|
*/
|
||||||
|
int ffio_open_null_buf(AVIOContext **s);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close a null buffer.
|
||||||
|
*
|
||||||
|
* @param s an IO context opened by ffio_open_null_buf
|
||||||
|
* @return the number of bytes written to the null buffer
|
||||||
|
*/
|
||||||
|
int ffio_close_null_buf(AVIOContext *s);
|
||||||
|
|
||||||
#endif /* AVFORMAT_AVIO_INTERNAL_H */
|
#endif /* AVFORMAT_AVIO_INTERNAL_H */
|
||||||
|
@ -975,3 +975,36 @@ int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer)
|
|||||||
av_free(s);
|
av_free(s);
|
||||||
return size - padding;
|
return size - padding;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int null_buf_write(void *opaque, uint8_t *buf, int buf_size)
|
||||||
|
{
|
||||||
|
DynBuffer *d = opaque;
|
||||||
|
|
||||||
|
d->pos += buf_size;
|
||||||
|
if (d->pos > d->size)
|
||||||
|
d->size = d->pos;
|
||||||
|
return buf_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ffio_open_null_buf(AVIOContext **s)
|
||||||
|
{
|
||||||
|
int ret = url_open_dyn_buf_internal(s, 0);
|
||||||
|
if (ret >= 0) {
|
||||||
|
AVIOContext *pb = *s;
|
||||||
|
pb->write_packet = null_buf_write;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ffio_close_null_buf(AVIOContext *s)
|
||||||
|
{
|
||||||
|
DynBuffer *d = s->opaque;
|
||||||
|
int size;
|
||||||
|
|
||||||
|
avio_flush(s);
|
||||||
|
|
||||||
|
size = d->size;
|
||||||
|
av_free(d);
|
||||||
|
av_free(s);
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user