mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-29 22:00:58 +02:00
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>
This commit is contained in:
parent
2687a51a3f
commit
e6190045b3
@ -59,6 +59,7 @@ int ff_mqc_length(MqcState *mqc);
|
|||||||
|
|
||||||
/** flush the encoder [returns number of bytes encoded] */
|
/** flush the encoder [returns number of bytes encoded] */
|
||||||
int ff_mqc_flush(MqcState *mqc);
|
int ff_mqc_flush(MqcState *mqc);
|
||||||
|
int ff_mqc_flush_to(MqcState *mqc, uint8_t *dst, int *dst_len);
|
||||||
|
|
||||||
/* decoder */
|
/* decoder */
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
* @author Kamil Nowosad
|
* @author Kamil Nowosad
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "libavutil/avassert.h"
|
||||||
#include "mqc.h"
|
#include "mqc.h"
|
||||||
|
|
||||||
static void byteout(MqcState *mqc)
|
static void byteout(MqcState *mqc)
|
||||||
@ -117,3 +118,23 @@ int ff_mqc_flush(MqcState *mqc)
|
|||||||
mqc->bp++;
|
mqc->bp++;
|
||||||
return mqc->bp - mqc->bpstart;
|
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;
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user