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