diff --git a/hi/mkv.c b/hi/mkv.c index 50ad5ff..f0b3f67 100644 --- a/hi/mkv.c +++ b/hi/mkv.c @@ -344,8 +344,16 @@ static int muxmkv_perform(CHiPubNode *pubn) { assert((frame->flags & CUTIHI_BS_SETUP_PACKET) == 0); + bool freeAvcc = false; size_t avccSz = 0; - uint8_t *avcc = annexb_to_avcc(frame->ptr, frame->sz, &avccSz); + uint8_t *avcc = NULL; + if(CHi_Crawl(&pubn->sinks[0])->type == CUTIHI_VAL_H264BS) { + avcc = annexb_to_avcc(frame->ptr, frame->sz, &avccSz); + freeAvcc = true; + } else { + avcc = frame->ptr; + avccSz = frame->sz; + } size_t simpleBlockSize = 4 + avccSz; @@ -360,7 +368,10 @@ static int muxmkv_perform(CHiPubNode *pubn) { ebml_writer_put(&this->wr, 0xA3, EBML_BINARY, (EBMLPrimitive) {.binary = {.length = simpleBlockSize, .ptr = simpleBlock}}); free(simpleBlock); - free(avcc); + + if(freeAvcc) { + free(avcc); + } CHi_BS_Pop(this->videoBacklog, 1); } diff --git a/hi/vpxenc.c b/hi/vpxenc.c index 877b960..d8d5976 100644 --- a/hi/vpxenc.c +++ b/hi/vpxenc.c @@ -42,7 +42,7 @@ static int encodevpx_perform(CHiPubNode *pub) { MTR_BEGIN("CHi", "encodevp9_perform"); - pub->sources[0].type = CUTIHI_VAL_VP9BS; + pub->sources[0].type = pub->type == CUTIHI_T('CEnc','GVP8') ? CUTIHI_VAL_VP8BS : CUTIHI_VAL_VP9BS; pub->sources[0].data.bitstream = NULL; if(node->state == WAITING) return 1;