diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2015-06-17 20:11:43 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-06-17 20:11:43 +0200 |
commit | e6190045b3a119cc27efe9fbd91eb7881fb6f823 (patch) | |
tree | 9f43fe27e5c327727f07bf52c8f84ba861d3a0c1 /libavcodec/mqcenc.c | |
parent | 2687a51a3fcffd28fcc88b7f67e4773eae259825 (diff) | |
download | ffmpeg-e6190045b3a119cc27efe9fbd91eb7881fb6f823.tar.gz |
avcodec/mqcenc: Add ff_mqc_flush_to()
This is needed to separate the end padding from the bitstream, allowing
to end it multiple times without disturbing it.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/mqcenc.c')
-rw-r--r-- | libavcodec/mqcenc.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/libavcodec/mqcenc.c b/libavcodec/mqcenc.c index 97d352be44..b82752750e 100644 --- a/libavcodec/mqcenc.c +++ b/libavcodec/mqcenc.c @@ -25,6 +25,7 @@ * @author Kamil Nowosad */ +#include "libavutil/avassert.h" #include "mqc.h" static void byteout(MqcState *mqc) @@ -117,3 +118,23 @@ int ff_mqc_flush(MqcState *mqc) mqc->bp++; return mqc->bp - mqc->bpstart; } + +int ff_mqc_flush_to(MqcState *mqc, uint8_t *dst, int *dst_len) +{ + int len; + MqcState mqc2 = *mqc; + mqc2.bpstart= + mqc2.bp = dst; + *mqc2.bp = *mqc->bp; + ff_mqc_flush(&mqc2); + *dst_len = mqc2.bp - dst; + if (mqc->bp < mqc->bpstart) { + av_assert1(mqc->bpstart - mqc->bp == 1); + av_assert1(*dst_len > 0); + av_assert1(mqc->bp[0] == 0 && dst[0] == 0); + (*dst_len) --; + memmove(dst, dst+1, *dst_len); + return mqc->bp - mqc->bpstart + 1 + *dst_len; + } + return mqc->bp - mqc->bpstart + *dst_len; +} |