Browse Source

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>
tags/n2.8
Michael Niedermayer 10 years ago
parent
commit
e6190045b3
2 changed files with 22 additions and 0 deletions
  1. +1
    -0
      libavcodec/mqc.h
  2. +21
    -0
      libavcodec/mqcenc.c

+ 1
- 0
libavcodec/mqc.h View File

@@ -59,6 +59,7 @@ int ff_mqc_length(MqcState *mqc);

/** flush the encoder [returns number of bytes encoded] */
int ff_mqc_flush(MqcState *mqc);
int ff_mqc_flush_to(MqcState *mqc, uint8_t *dst, int *dst_len);

/* decoder */



+ 21
- 0
libavcodec/mqcenc.c View File

@@ -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;
}

Loading…
Cancel
Save