This commit adds the avio_get_dyn_buf function which allows accessing the content of a DynBuffer without destroying it. This is required in matroskaenc for preliminary writing (correct) mkv headers. Context for this change is fixing regression bug #5977. Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>tags/n3.3
| @@ -15,6 +15,9 @@ libavutil: 2015-08-28 | |||||
| API changes, most recent first: | API changes, most recent first: | ||||
| 2017-01-06 - xxxxxxx - lavf 57.62.100- avio.h | |||||
| Add avio_get_dyn_buf() | |||||
| 2016-12-10 - xxxxxxx - lavu xx.xx.100- imgutils.h | 2016-12-10 - xxxxxxx - lavu xx.xx.100- imgutils.h | ||||
| Add av_image_check_size2() | Add av_image_check_size2() | ||||
| @@ -703,6 +703,18 @@ int avio_closep(AVIOContext **s); | |||||
| */ | */ | ||||
| int avio_open_dyn_buf(AVIOContext **s); | int avio_open_dyn_buf(AVIOContext **s); | ||||
| /** | |||||
| * Return the written size and a pointer to the buffer. | |||||
| * The AVIOContext stream is left intact. | |||||
| * The buffer must NOT be freed. | |||||
| * No padding is added to the buffer. | |||||
| * | |||||
| * @param s IO context | |||||
| * @param pbuffer pointer to a byte buffer | |||||
| * @return the length of the byte buffer | |||||
| */ | |||||
| int avio_get_dyn_buf(AVIOContext *s, uint8_t **pbuffer); | |||||
| /** | /** | ||||
| * Return the written size and a pointer to the buffer. The buffer | * Return the written size and a pointer to the buffer. The buffer | ||||
| * must be freed with av_free(). | * must be freed with av_free(). | ||||
| @@ -1277,6 +1277,23 @@ int ffio_open_dyn_packet_buf(AVIOContext **s, int max_packet_size) | |||||
| return url_open_dyn_buf_internal(s, max_packet_size); | return url_open_dyn_buf_internal(s, max_packet_size); | ||||
| } | } | ||||
| int avio_get_dyn_buf(AVIOContext *s, uint8_t **pbuffer) | |||||
| { | |||||
| DynBuffer *d; | |||||
| if (!s) { | |||||
| *pbuffer = NULL; | |||||
| return 0; | |||||
| } | |||||
| avio_flush(s); | |||||
| d = s->opaque; | |||||
| *pbuffer = d->buffer; | |||||
| return d->size; | |||||
| } | |||||
| int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer) | int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer) | ||||
| { | { | ||||
| DynBuffer *d; | DynBuffer *d; | ||||
| @@ -32,7 +32,7 @@ | |||||
| // Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) | // Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) | ||||
| // Also please add any ticket numbers that you believe might be affected here | // Also please add any ticket numbers that you believe might be affected here | ||||
| #define LIBAVFORMAT_VERSION_MAJOR 57 | #define LIBAVFORMAT_VERSION_MAJOR 57 | ||||
| #define LIBAVFORMAT_VERSION_MINOR 61 | |||||
| #define LIBAVFORMAT_VERSION_MINOR 62 | |||||
| #define LIBAVFORMAT_VERSION_MICRO 100 | #define LIBAVFORMAT_VERSION_MICRO 100 | ||||
| #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ | #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ | ||||