summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavformat/av1.c32
-rw-r--r--libavformat/av1.h4
2 files changed, 23 insertions, 13 deletions
diff --git a/libavformat/av1.c b/libavformat/av1.c
index 4ff4bffddf..876fd92733 100644
--- a/libavformat/av1.c
+++ b/libavformat/av1.c
@@ -19,6 +19,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include "libavutil/avassert.h"
#include "libavutil/mem.h"
#include "libavcodec/av1.h"
#include "libavcodec/av1_parse.h"
@@ -48,7 +49,8 @@ int ff_av1_filter_obus(AVIOContext *pb, const uint8_t *buf, int size)
case AV1_OBU_PADDING:
break;
default:
- avio_write(pb, buf, len);
+ if (pb)
+ avio_write(pb, buf, len);
size += len;
break;
}
@@ -58,23 +60,31 @@ int ff_av1_filter_obus(AVIOContext *pb, const uint8_t *buf, int size)
return size;
}
-int ff_av1_filter_obus_buf(const uint8_t *buf, uint8_t **out, int *size)
+int ff_av1_filter_obus_buf(const uint8_t *in, uint8_t **out, int *size)
{
- AVIOContext *pb;
- int ret;
+ AVIOContext pb;
+ uint8_t *buf;
+ int len, ret;
- ret = avio_open_dyn_buf(&pb);
- if (ret < 0)
- return ret;
-
- ret = ff_av1_filter_obus(pb, buf, *size);
+ len = ret = ff_av1_filter_obus(NULL, in, *size);
if (ret < 0) {
- ffio_free_dyn_buf(&pb);
return ret;
}
+ buf = av_malloc(len + AV_INPUT_BUFFER_PADDING_SIZE);
+ if (!buf)
+ return AVERROR(ENOMEM);
+
+ ffio_init_context(&pb, buf, len, 1, NULL, NULL, NULL, NULL);
+
+ ret = ff_av1_filter_obus(&pb, in, *size);
+ av_assert1(ret == len);
+
+ memset(buf + len, 0, AV_INPUT_BUFFER_PADDING_SIZE);
+
av_freep(out);
- *size = avio_close_dyn_buf(pb, out);
+ *out = buf;
+ *size = len;
return 0;
}
diff --git a/libavformat/av1.h b/libavformat/av1.h
index 0578435376..acba12612c 100644
--- a/libavformat/av1.h
+++ b/libavformat/av1.h
@@ -61,7 +61,7 @@ int ff_av1_filter_obus(AVIOContext *pb, const uint8_t *buf, int size);
*
* @param pb pointer to the AVIOContext where the filtered bitstream shall be
* written
- * @param buf input data buffer
+ * @param in input data buffer
* @param out pointer to pointer that will hold the allocated data buffer
* @param size size of the input data buffer. The size of the resulting output
data buffer will be written here
@@ -69,7 +69,7 @@ int ff_av1_filter_obus(AVIOContext *pb, const uint8_t *buf, int size);
* @return 0 in case of success, a negative AVERROR code in case of failure.
* On failure, out and size are unchanged
*/
-int ff_av1_filter_obus_buf(const uint8_t *buf, uint8_t **out, int *size);
+int ff_av1_filter_obus_buf(const uint8_t *in, uint8_t **out, int *size);
/**
* Parses a Sequence Header from the the provided buffer.