mirror of
https://github.com/game-stop/veejay.git
synced 2025-12-16 12:50:00 +01:00
dont allocate memory in put function
This commit is contained in:
@@ -32,6 +32,7 @@
|
|||||||
#include <libswscale/swscale.h>
|
#include <libswscale/swscale.h>
|
||||||
#include <libyuv/yuvconv.h>
|
#include <libyuv/yuvconv.h>
|
||||||
|
|
||||||
|
#define RUP8(num)(((num)+8)&~8)
|
||||||
vj_yuv *vj_yuv4mpeg_alloc(int w, int h, float fps, int out_pixel_format)
|
vj_yuv *vj_yuv4mpeg_alloc(int w, int h, float fps, int out_pixel_format)
|
||||||
{
|
{
|
||||||
vj_yuv *yuv4mpeg = (vj_yuv *) vj_calloc(sizeof(vj_yuv));
|
vj_yuv *yuv4mpeg = (vj_yuv *) vj_calloc(sizeof(vj_yuv));
|
||||||
@@ -60,6 +61,10 @@ void vj_yuv4mpeg_free(vj_yuv *v) {
|
|||||||
}
|
}
|
||||||
if(v->buf[0] != NULL )
|
if(v->buf[0] != NULL )
|
||||||
free(v->buf[0]);
|
free(v->buf[0]);
|
||||||
|
if(v->src)
|
||||||
|
free(v->src);
|
||||||
|
if(v->dst)
|
||||||
|
free(v->dst);
|
||||||
free(v);
|
free(v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -99,7 +104,7 @@ static int vj_yuv_stream_start_read1(vj_yuv * yuv4mpeg, int fd, int width, int h
|
|||||||
yuv4mpeg->chroma = y4m_si_get_chroma( &(yuv4mpeg->streaminfo) );
|
yuv4mpeg->chroma = y4m_si_get_chroma( &(yuv4mpeg->streaminfo) );
|
||||||
|
|
||||||
if( yuv4mpeg->chroma != Y4M_CHROMA_422 ) {
|
if( yuv4mpeg->chroma != Y4M_CHROMA_422 ) {
|
||||||
yuv4mpeg->buf[0] = vj_calloc( sizeof(uint8_t) * w * h * 4 );
|
yuv4mpeg->buf[0] = vj_calloc( sizeof(uint8_t) * RUP8( w * h * 4 ) );
|
||||||
yuv4mpeg->buf[1] = yuv4mpeg->buf[0] + (w*h);
|
yuv4mpeg->buf[1] = yuv4mpeg->buf[0] + (w*h);
|
||||||
yuv4mpeg->buf[2] = yuv4mpeg->buf[1] + (w*h);
|
yuv4mpeg->buf[2] = yuv4mpeg->buf[1] + (w*h);
|
||||||
yuv4mpeg->buf[3] = yuv4mpeg->buf[2] + (w*h);
|
yuv4mpeg->buf[3] = yuv4mpeg->buf[2] + (w*h);
|
||||||
@@ -173,6 +178,7 @@ int vj_yuv_stream_write_header(vj_yuv * yuv4mpeg, VJFrame *frame, int out_chroma
|
|||||||
sws_tem.flags = yuv_which_scaler();
|
sws_tem.flags = yuv_which_scaler();
|
||||||
|
|
||||||
yuv4mpeg->dst = yuv_yuv_template( NULL,NULL,NULL, frame->width,frame->height, get_pixfmt_from_chroma(out_chroma));
|
yuv4mpeg->dst = yuv_yuv_template( NULL,NULL,NULL, frame->width,frame->height, get_pixfmt_from_chroma(out_chroma));
|
||||||
|
yuv4mpeg->src = yuv_yuv_template( NULL,NULL,NULL, yuv4mpeg->width,yuv4mpeg->height, yuv4mpeg->format );
|
||||||
|
|
||||||
yuv4mpeg->scaler = yuv_init_swscaler( frame, yuv4mpeg->dst, &sws_tem, yuv_sws_get_cpu_flags());
|
yuv4mpeg->scaler = yuv_init_swscaler( frame, yuv4mpeg->dst, &sws_tem, yuv_sws_get_cpu_flags());
|
||||||
|
|
||||||
@@ -264,9 +270,10 @@ void vj_yuv_stream_stop_write(vj_yuv * yuv4mpeg)
|
|||||||
close(yuv4mpeg->fd);
|
close(yuv4mpeg->fd);
|
||||||
|
|
||||||
if( yuv4mpeg->scaler ) {
|
if( yuv4mpeg->scaler ) {
|
||||||
yuv_free_swscaler( yuv4mpeg->scaler );
|
yuv_free_swscaler( yuv4mpeg->scaler );
|
||||||
yuv4mpeg->scaler = NULL;
|
yuv4mpeg->scaler = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void vj_yuv_stream_stop_read(vj_yuv * yuv4mpeg)
|
void vj_yuv_stream_stop_read(vj_yuv * yuv4mpeg)
|
||||||
@@ -276,14 +283,15 @@ void vj_yuv_stream_stop_read(vj_yuv * yuv4mpeg)
|
|||||||
close(yuv4mpeg->fd);
|
close(yuv4mpeg->fd);
|
||||||
yuv4mpeg->sar = y4m_sar_UNKNOWN;
|
yuv4mpeg->sar = y4m_sar_UNKNOWN;
|
||||||
yuv4mpeg->dar = y4m_dar_4_3;
|
yuv4mpeg->dar = y4m_dar_4_3;
|
||||||
|
|
||||||
if( yuv4mpeg->scaler ) {
|
if( yuv4mpeg->scaler ) {
|
||||||
yuv_free_swscaler( yuv4mpeg->scaler );
|
yuv_free_swscaler( yuv4mpeg->scaler );
|
||||||
yuv4mpeg->scaler = NULL;
|
yuv4mpeg->scaler = NULL;
|
||||||
}
|
}
|
||||||
if( yuv4mpeg->buf[0] ) {
|
if( yuv4mpeg->buf[0] ) {
|
||||||
free(yuv4mpeg->buf[0]);
|
free(yuv4mpeg->buf[0]);
|
||||||
yuv4mpeg->buf[0] = NULL;
|
yuv4mpeg->buf[0] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -396,27 +404,28 @@ int vj_yuv_get_frame(vj_yuv * yuv4mpeg, uint8_t *dst[3])
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int vj_yuv_put_frame(vj_yuv * vjyuv, uint8_t ** src)
|
int vj_yuv_put_frame(vj_yuv * vjyuv, uint8_t **src)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
if (!vjyuv->fd) {
|
if (!vjyuv->fd) {
|
||||||
veejay_msg(VEEJAY_MSG_ERROR, "Invalid file descriptor for y4m stream");
|
veejay_msg(VEEJAY_MSG_ERROR, "Invalid file descriptor for y4m stream");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if( vjyuv->scaler ) {
|
if( vjyuv->scaler ) {
|
||||||
VJFrame *srcf = yuv_yuv_template( src[0], src[1], src[2],vjyuv->width,vjyuv->height,vjyuv->format);
|
VJFrame *f = vjyuv->src;
|
||||||
|
f->data[0] = src[0];
|
||||||
|
f->data[1] = src[1];
|
||||||
|
f->data[2] = src[2];
|
||||||
|
|
||||||
|
yuv_convert_and_scale( vjyuv->scaler, f, vjyuv->dst );
|
||||||
|
|
||||||
yuv_convert_and_scale( vjyuv->scaler, srcf, vjyuv->dst );
|
|
||||||
i = y4m_write_frame(vjyuv->fd, &(vjyuv->streaminfo),&(vjyuv->frameinfo), vjyuv->dst->data);
|
i = y4m_write_frame(vjyuv->fd, &(vjyuv->streaminfo),&(vjyuv->frameinfo), vjyuv->dst->data);
|
||||||
|
}
|
||||||
free(srcf);
|
else {
|
||||||
} else {
|
|
||||||
i = y4m_write_frame(vjyuv->fd, &(vjyuv->streaminfo),&(vjyuv->frameinfo), src );
|
i = y4m_write_frame(vjyuv->fd, &(vjyuv->streaminfo),&(vjyuv->frameinfo), src );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (i != Y4M_OK) {
|
if (i != Y4M_OK) {
|
||||||
veejay_msg(VEEJAY_MSG_ERROR, "yuv4mpeg: %s", y4m_strerr(i));
|
veejay_msg(VEEJAY_MSG_ERROR, "yuv4mpeg: %s", y4m_strerr(i));
|
||||||
return -1;
|
return -1;
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ typedef struct {
|
|||||||
uint8_t *buf[4];
|
uint8_t *buf[4];
|
||||||
int is_jpeg;
|
int is_jpeg;
|
||||||
VJFrame *dst;
|
VJFrame *dst;
|
||||||
|
VJFrame *src;
|
||||||
} vj_yuv;
|
} vj_yuv;
|
||||||
|
|
||||||
vj_yuv *vj_yuv4mpeg_alloc(int dst_w, int dst_h,float fps, int out_pix_fmt);
|
vj_yuv *vj_yuv4mpeg_alloc(int dst_w, int dst_h,float fps, int out_pix_fmt);
|
||||||
@@ -64,7 +65,7 @@ void vj_yuv_stream_stop_write(vj_yuv * yuv4mpeg);
|
|||||||
|
|
||||||
int vj_yuv_get_frame(vj_yuv *, uint8_t **);
|
int vj_yuv_get_frame(vj_yuv *, uint8_t **);
|
||||||
|
|
||||||
int vj_yuv_put_frame(vj_yuv * vjyuv, uint8_t **);
|
int vj_yuv_put_frame(vj_yuv * vjyuv, uint8_t **src);
|
||||||
|
|
||||||
int vj_yuv_get_aframe(vj_yuv * vjyuv, uint8_t * audio);
|
int vj_yuv_get_aframe(vj_yuv * vjyuv, uint8_t * audio);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user