diff options
author | Vito Caputo <vcaputo@pengaru.com> | 2020-07-11 16:47:00 -0700 |
---|---|---|
committer | Vito Caputo <vcaputo@pengaru.com> | 2020-07-11 16:47:00 -0700 |
commit | 3625160acc1715fc380f58ec3c4248485bed2370 (patch) | |
tree | dc95a32d81daac298cef69879a639029797fb762 /recordmydesktop/src/rmd_init_encoder.c | |
parent | cfcca8681b88a171fb2cdbb83daa5f22bbedb6b8 (diff) |
*: drop {gtk,qt}-recordmydesktop subdirs
This restores the recordmydesktop/ subdir as root from the mirror I
cloned by fork from.
I have no particular interest in the gtk/qt frontends and it doesn't
appear they were part of a single tree in the past. But I will
probably preserve backwards compatibility of the cli so they can
continue to work with this fork installed.
Diffstat (limited to 'recordmydesktop/src/rmd_init_encoder.c')
-rw-r--r-- | recordmydesktop/src/rmd_init_encoder.c | 346 |
1 files changed, 0 insertions, 346 deletions
diff --git a/recordmydesktop/src/rmd_init_encoder.c b/recordmydesktop/src/rmd_init_encoder.c deleted file mode 100644 index a0d81e6..0000000 --- a/recordmydesktop/src/rmd_init_encoder.c +++ /dev/null @@ -1,346 +0,0 @@ -/****************************************************************************** -* recordMyDesktop * -******************************************************************************* -* * -* Copyright (C) 2006,2007,2008 John Varouhakis * -* * -* * -* This program is free software; you can redistribute it and/or modify * -* it under the terms of the GNU General Public License as published by * -* the Free Software Foundation; either version 2 of the License, or * -* (at your option) any later version. * -* * -* This program is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; without even the implied warranty of * -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -* GNU General Public License for more details. * -* * -* You should have received a copy of the GNU General Public License * -* along with this program; if not, write to the Free Software * -* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -* * -* * -* * -* For further information contact me at johnvarouhakis@gmail.com * -******************************************************************************/ - -#include "config.h" -#include "rmd_init_encoder.h" - -#include "rmd_types.h" - -#include "skeleton.h" - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sys/stat.h> - - - -static void m_add_fishead_packet(ogg_stream_state *m_ogg_state) { - fishead_packet skel_fp; - - skel_fp.ptime_n = skel_fp.btime_n = 0; - skel_fp.ptime_d = skel_fp.btime_d = 1000; - - add_fishead_to_stream(m_ogg_state, &skel_fp); -} - - -static int rmdIncrementalNaming(char **name) { - struct stat buff; - char *base_name__; - int i = 0, fname_length = strlen(*name)-4; - - base_name__ = malloc(fname_length+1); - strncpy(base_name__, *name, fname_length); - base_name__[fname_length] = '\0'; - - //this will go on an endless loop if you have 65536? - //files with the same name - //or it will crash and die.anyone interested in trying ? - while (stat(*name, &buff)==0) { - //create new name - char *tname = malloc(strlen(*name)+10); - char numbuf[8]; - - strcpy(tname, base_name__); - strcat(tname, "-"); - i++; - snprintf( numbuf, 8, "%d", i ); - strcat(tname, numbuf); - strcat(tname, ".ogv"); - //save new name - - free(*name); - *name = malloc(strlen(tname)+1); - strcpy(*name, tname); - free(tname); - } - - free(base_name__); - return 0; -} - -void rmdInitEncoder(ProgData *pdata, EncData *enc_data_t, int buffer_ready) { - int y0, y1, y2, fname_length; - ogg_stream_state m_ogg_skel; - ogg_page skel_og_pg; - fisbone_packet skel_fbv, //video fisbone packet - skel_fba; //audio fisbone packet - const char *fname; - - pdata->enc_data = enc_data_t; - - fname = pdata->args.filename; - fname_length = strlen(fname); - if (!(fname_length>4 && !strcasecmp(&fname[fname_length-3], "ogv"))) { - - char *new_name = malloc(fname_length + 5); - strcpy(new_name, fname); - strcat(new_name, ".ogv"); - - free(pdata->args.filename); - pdata->args.filename = new_name; - } - - if (!pdata->args.overwrite) { - rmdIncrementalNaming(&(pdata)->args.filename); - fprintf(stderr, "Output file: %s\n", pdata->args.filename); - } - - enc_data_t->fp = fopen((pdata)->args.filename, "w"); - if (enc_data_t->fp == NULL) { - fprintf(stderr, "Cannot open file %s for writting!\n", (pdata)->args.filename); - exit(13); - } - - //each stream must have a unique - srand(time(NULL)); - y0 = rand() + 1; - y1 = rand() + 1; - y2 = rand() + 1; - y2 += (y1 == y2); - y0 = (((y0 == y1) || (y0 == y2)) ? (y1 + y2) : y0); - - //init ogg streams - //skeleton first - ogg_stream_init(&m_ogg_skel, y0); - m_add_fishead_packet(&m_ogg_skel); - if (ogg_stream_pageout(&m_ogg_skel, &skel_og_pg) != 1) { - fprintf (stderr, "Internal Ogg library error.\n"); - exit (2); - } - fwrite(skel_og_pg.header, 1, skel_og_pg.header_len, enc_data_t->fp); - fwrite(skel_og_pg.body, 1, skel_og_pg.body_len, enc_data_t->fp); - - ogg_stream_init(&enc_data_t->m_ogg_ts, y1); - if (!pdata->args.nosound) - ogg_stream_init(&enc_data_t->m_ogg_vs, y2); - - theora_info_init(&enc_data_t->m_th_inf); - enc_data_t->m_th_inf.frame_width = pdata->brwin.rrect.width; - enc_data_t->m_th_inf.frame_height = pdata->brwin.rrect.height; - enc_data_t->m_th_inf.width = ((enc_data_t->m_th_inf.frame_width + 15) >> 4) << 4; - enc_data_t->m_th_inf.height = ((enc_data_t->m_th_inf.frame_height + 15) >> 4) << 4; - enc_data_t->m_th_inf.offset_x = 0; - enc_data_t->m_th_inf.offset_y = 0; - - enc_data_t->m_th_inf.fps_numerator = pdata->args.fps * 100.0; - enc_data_t->m_th_inf.fps_denominator = 100; - enc_data_t->m_th_inf.aspect_numerator = 1; - enc_data_t->m_th_inf.aspect_denominator = 1; - - enc_data_t->m_th_inf.colorspace = OC_CS_UNSPECIFIED; - enc_data_t->m_th_inf.pixelformat = OC_PF_420; - - enc_data_t->m_th_inf.target_bitrate = pdata->args.v_bitrate; - enc_data_t->m_th_inf.quality = pdata->args.v_quality; - enc_data_t->m_th_inf.dropframes_p = 0; - enc_data_t->m_th_inf.quick_p = 1; - enc_data_t->m_th_inf.keyframe_auto_p = 1; - enc_data_t->m_th_inf.keyframe_frequency = 64; - enc_data_t->m_th_inf.keyframe_frequency_force = 64; - enc_data_t->m_th_inf.keyframe_data_target_bitrate = enc_data_t->m_th_inf.quality * 1.5; - enc_data_t->m_th_inf.keyframe_auto_threshold = 80; - enc_data_t->m_th_inf.keyframe_mindistance = 8; - enc_data_t->m_th_inf.noise_sensitivity = 1; - enc_data_t->m_th_inf.sharpness = 2; - - if (!pdata->args.nosound) { - int ret; - vorbis_info_init(&enc_data_t->m_vo_inf); - ret = vorbis_encode_init_vbr( &enc_data_t->m_vo_inf, - pdata->args.channels, - pdata->args.frequency, - (float)pdata->args.s_quality*0.1); - if (ret) { - fprintf(stderr, "Error while setting up vorbis stream quality!\n"); - exit(2); - } - vorbis_comment_init(&enc_data_t->m_vo_cmmnt); - vorbis_analysis_init(&enc_data_t->m_vo_dsp, &enc_data_t->m_vo_inf); - vorbis_block_init(&enc_data_t->m_vo_dsp, &enc_data_t->m_vo_block); - } - - if (theora_encode_init(&enc_data_t->m_th_st, &enc_data_t->m_th_inf)) { - fprintf(stderr, "Theora encoder initialization failure.\n"); - exit(2); - } - - if (theora_encode_header(&enc_data_t->m_th_st, &enc_data_t->m_ogg_pckt1)) { - fprintf(stderr, "Theora enocde header failure.\n"); - exit(2); - } - - ogg_stream_packetin(&enc_data_t->m_ogg_ts, &enc_data_t->m_ogg_pckt1); - if (ogg_stream_pageout(&enc_data_t->m_ogg_ts, &enc_data_t->m_ogg_pg) != 1) { - fprintf(stderr, "Internal Ogg library error.\n"); - exit(2); - } - fwrite(enc_data_t->m_ogg_pg.header, 1, - enc_data_t->m_ogg_pg.header_len, - enc_data_t->fp); - fwrite(enc_data_t->m_ogg_pg.body, 1, - enc_data_t->m_ogg_pg.body_len, - enc_data_t->fp); - - theora_comment_init(&enc_data_t->m_th_cmmnt); - theora_comment_add_tag(&enc_data_t->m_th_cmmnt, "recordMyDesktop", VERSION); - theora_encode_comment(&enc_data_t->m_th_cmmnt, &enc_data_t->m_ogg_pckt1); - ogg_stream_packetin(&enc_data_t->m_ogg_ts, &enc_data_t->m_ogg_pckt1); - theora_encode_tables(&enc_data_t->m_th_st, &enc_data_t->m_ogg_pckt1); - ogg_stream_packetin(&enc_data_t->m_ogg_ts, &enc_data_t->m_ogg_pckt1); - - if (!pdata->args.nosound) { - ogg_packet header; - ogg_packet header_comm; - ogg_packet header_code; - - vorbis_analysis_headerout( &enc_data_t->m_vo_dsp, - &enc_data_t->m_vo_cmmnt, - &header, &header_comm, - &header_code); - ogg_stream_packetin(&enc_data_t->m_ogg_vs, &header); - if (ogg_stream_pageout(&enc_data_t->m_ogg_vs, &enc_data_t->m_ogg_pg) != 1) { - fprintf(stderr, "Internal Ogg library error.\n"); - exit(2); - } - - fwrite(enc_data_t->m_ogg_pg.header, 1, - enc_data_t->m_ogg_pg.header_len, - enc_data_t->fp); - - fwrite(enc_data_t->m_ogg_pg.body, 1, - enc_data_t->m_ogg_pg.body_len, - enc_data_t->fp); - - ogg_stream_packetin(&enc_data_t->m_ogg_vs, &header_comm); - ogg_stream_packetin(&enc_data_t->m_ogg_vs, &header_code); - } - - //fishbone packets go here - memset(&skel_fbv, 0, sizeof(skel_fbv)); - skel_fbv.serial_no = enc_data_t->m_ogg_ts.serialno; - skel_fbv.nr_header_packet = 3; - skel_fbv.granule_rate_n = enc_data_t->m_th_inf.fps_numerator; - skel_fbv.granule_rate_d = enc_data_t->m_th_inf.fps_denominator; - skel_fbv.start_granule = 0; - skel_fbv.preroll = 0; - skel_fbv.granule_shift = theora_granule_shift(&enc_data_t->m_th_inf); - add_message_header_field(&skel_fbv, "Content-Type", "video/theora"); - - add_fisbone_to_stream(&m_ogg_skel, &skel_fbv); - - if (!pdata->args.nosound) { - - memset(&skel_fba, 0, sizeof(skel_fba)); - skel_fba.serial_no = enc_data_t->m_ogg_vs.serialno; - skel_fba.nr_header_packet = 3; - skel_fba.granule_rate_n = pdata->args.frequency; - skel_fba.granule_rate_d = (ogg_int64_t)1; - skel_fba.start_granule = 0; - skel_fba.preroll = 2; - skel_fba.granule_shift = 0; - add_message_header_field(&skel_fba, "Content-Type", "audio/vorbis"); - - add_fisbone_to_stream(&m_ogg_skel, &skel_fba); - } - - while (1) { - int result = ogg_stream_flush(&m_ogg_skel, &skel_og_pg); - if (result < 0) { - fprintf (stderr, "Internal Ogg library error.\n"); - exit(2); - } - - if (result == 0) - break; - - fwrite(skel_og_pg.header, 1, skel_og_pg.header_len, enc_data_t->fp); - fwrite(skel_og_pg.body, 1, skel_og_pg.body_len, enc_data_t->fp); - } - - while (1) { - int result = ogg_stream_flush(&enc_data_t->m_ogg_ts, &enc_data_t->m_ogg_pg); - if (result < 0) { - fprintf(stderr, "Internal Ogg library error.\n"); - exit(2); - } - - if (result == 0) - break; - - fwrite( enc_data_t->m_ogg_pg.header, 1, - enc_data_t->m_ogg_pg.header_len, - enc_data_t->fp); - fwrite( enc_data_t->m_ogg_pg.body, 1, - enc_data_t->m_ogg_pg.body_len, - enc_data_t->fp); - } - - if (!pdata->args.nosound) { - while (1) { - int result = ogg_stream_flush(&enc_data_t->m_ogg_vs, &enc_data_t->m_ogg_pg); - if (result < 0) { - fprintf(stderr, "Internal Ogg library error.\n"); - exit(2); - } - - if (result == 0) - break; - - fwrite( enc_data_t->m_ogg_pg.header, 1, - enc_data_t->m_ogg_pg.header_len, - enc_data_t->fp); - fwrite( enc_data_t->m_ogg_pg.body, 1, - enc_data_t->m_ogg_pg.body_len, - enc_data_t->fp); - } - } - - //skeleton eos - add_eos_packet_to_stream(&m_ogg_skel); - if (ogg_stream_flush(&m_ogg_skel, &skel_og_pg) < 0) { - fprintf(stderr, "Internal Ogg library error.\n"); - exit(2); - } - fwrite(skel_og_pg.header, 1, skel_og_pg.header_len, enc_data_t->fp); - - //theora buffer allocation, if any - if (!buffer_ready) { - enc_data_t->yuv.y = malloc(enc_data_t->m_th_inf.height * enc_data_t->m_th_inf.width); - enc_data_t->yuv.u = malloc(enc_data_t->m_th_inf.height * enc_data_t->m_th_inf.width / 4); - enc_data_t->yuv.v = malloc(enc_data_t->m_th_inf.height * enc_data_t->m_th_inf.width / 4); - enc_data_t->yuv.y_width = enc_data_t->m_th_inf.width; - enc_data_t->yuv.y_height = enc_data_t->m_th_inf.height; - enc_data_t->yuv.y_stride = enc_data_t->m_th_inf.width; - - enc_data_t->yuv.uv_width = enc_data_t->m_th_inf.width / 2; - enc_data_t->yuv.uv_height = enc_data_t->m_th_inf.height / 2; - enc_data_t->yuv.uv_stride = enc_data_t->m_th_inf.width / 2; - } - - theora_info_clear(&enc_data_t->m_th_inf); -} |