Example #1
0
int FileJPEGList::write_frame(VFrame *frame, VFrame *data)
{
	mjpeg_t *mjpeg = mjpeg_new(asset->width, 
		asset->height, 
		1);
	mjpeg_compress(mjpeg, 
		frame->get_rows(), 
		frame->get_y(), 
		frame->get_u(), 
		frame->get_v(),
		frame->get_color_model(),
		file->cpus);
	data->allocate_compressed_data(mjpeg_output_size(mjpeg));
	bcopy(mjpeg_output_buffer(mjpeg), frame->get_data(), mjpeg_output_size(mjpeg));
	mjpeg_delete(mjpeg);
	return 0;
}
Example #2
0
static int encode(quicktime_t *file, unsigned char **row_pointers, int track)
{
    quicktime_video_map_t *vtrack = &(file->vtracks[track]);
    initialize(vtrack);
    quicktime_jpeg_codec_t *codec = ((quicktime_codec_t*)vtrack->codec)->priv;
    quicktime_trak_t *trak = vtrack->track;
    mjpeg_set_quality(codec->mjpeg, codec->quality);
    mjpeg_set_float(codec->mjpeg, codec->use_float);
    //int64_t offset = quicktime_position(file);
    int result = 0;
    long field2_offset;
    quicktime_atom_t chunk_atom;

//printf("encode 1\n");
    mjpeg_set_cpus(codec->mjpeg, file->cpus);
    mjpeg_compress(codec->mjpeg, row_pointers,
                   row_pointers[0], row_pointers[1], row_pointers[2],
                   file->color_model, file->cpus);

    if(codec->jpeg_type == JPEG_MJPA)
    {
        if(file->use_avi)
        {
            mjpeg_insert_avi_markers(&codec->mjpeg->output_data,
                                     &codec->mjpeg->output_size,
                                     &codec->mjpeg->output_allocated,
                                     2,
                                     &field2_offset);
        }
        else
        {
            mjpeg_insert_quicktime_markers(&codec->mjpeg->output_data,
                                           &codec->mjpeg->output_size,
                                           &codec->mjpeg->output_allocated,
                                           2,
                                           &field2_offset);
        }
    }

    quicktime_write_chunk_header(file, trak, &chunk_atom);
    result = !quicktime_write_data(file,
                                   (char*)mjpeg_output_buffer(codec->mjpeg),
                                   mjpeg_output_size(codec->mjpeg));
    quicktime_write_chunk_footer(file,
                                 trak,
                                 vtrack->current_chunk,
                                 &chunk_atom,
                                 1);

    vtrack->current_chunk++;
//printf("encode 100\n");
    return result;
}