Mercurial > mplayer.hg
changeset 24902:c1660ecae8c4
100% cosmetics: reformatted with tabs and symmetric braces and removed useless braces and trailing tabs
author | nicodvb |
---|---|
date | Fri, 02 Nov 2007 11:43:03 +0000 |
parents | bddde415c844 |
children | b4cdc74f4496 |
files | libmpdemux/muxer_mpeg.c |
diffstat | 1 files changed, 335 insertions(+), 330 deletions(-) [+] |
line wrap: on
line diff
--- a/libmpdemux/muxer_mpeg.c Thu Nov 01 23:33:51 2007 +0000 +++ b/libmpdemux/muxer_mpeg.c Fri Nov 02 11:43:03 2007 +0000 @@ -726,7 +726,7 @@ if(mux_type == MUX_MPEG2) - { + { if(h->buffer_size > 0) { buff[len] = 0x1e; //std flag @@ -2227,9 +2227,7 @@ spriv->max_buffer_size = 16*1024; } else if(stream->wf->wFormatTag == AUDIO_AAC1 || stream->wf->wFormatTag == AUDIO_AAC2) - { priv->use_psm = 1; - } else if(stream->wf->wFormatTag == AUDIO_MP2 || stream->wf->wFormatTag == AUDIO_MP3) spriv->is_ready = 0; } @@ -2239,14 +2237,14 @@ spriv->max_buffer_size = conf_vbuf_size*1024; else { - if(priv->is_dvd) - spriv->max_buffer_size = 232*1024; - else if(priv->is_xsvcd) - spriv->max_buffer_size = 230*1024; - else if(priv->is_xvcd) - spriv->max_buffer_size = 46*1024; - else - spriv->max_buffer_size = 232*1024; //no profile => unconstrained :) FIXME!!! + if(priv->is_dvd) + spriv->max_buffer_size = 232*1024; + else if(priv->is_xsvcd) + spriv->max_buffer_size = 230*1024; + else if(priv->is_xvcd) + spriv->max_buffer_size = 46*1024; + else + spriv->max_buffer_size = 232*1024; //no profile => unconstrained :) FIXME!!! } if(is_mpeg4(stream->bih->biCompression)) @@ -2257,110 +2255,115 @@ } -static void mpegfile_write_chunk(muxer_stream_t *s,size_t len,unsigned int flags, double dts_arg, double pts_arg){ - size_t sz = 0; - uint64_t tmp; - muxer_t *muxer = s->muxer; - muxer_priv_t *priv = (muxer_priv_t *)muxer->priv; - muxer_headers_t *spriv = (muxer_headers_t*) s->priv; - float fps; - uint32_t stream_format, nf; +static void mpegfile_write_chunk(muxer_stream_t *s,size_t len,unsigned int flags, double dts_arg, double pts_arg) +{ + size_t sz = 0; + uint64_t tmp; + muxer_t *muxer = s->muxer; + muxer_priv_t *priv = (muxer_priv_t *)muxer->priv; + muxer_headers_t *spriv = (muxer_headers_t*) s->priv; + float fps; + uint32_t stream_format, nf; + + if(s->buffer == NULL || len == -1) + return; + + if (s->type == MUXER_TYPE_VIDEO) + { // try to recognize frame type... + fps = (float) s->h.dwRate/ (float) s->h.dwScale; + spriv->type = 1; + stream_format = s->bih->biCompression; + if(! spriv->vframes) + { + spriv->last_dts = spriv->last_pts - (uint64_t)(27000000.0f/fps); + mp_msg(MSGT_MUXER, MSGL_INFO,"INITV: %.3lf, %.3lf, fps: %.3f\r\n", (double) spriv->last_pts/27000000.0f, (double) spriv->last_dts/27000000.0f, fps); + } - if(s->buffer == NULL) - return; - if(len == -1) - return; - - if (s->type == MUXER_TYPE_VIDEO) { // try to recognize frame type... - fps = (float) s->h.dwRate/ (float) s->h.dwScale; - spriv->type = 1; - stream_format = s->bih->biCompression; - if(! spriv->vframes) - { - spriv->last_dts = spriv->last_pts - (uint64_t)(27000000.0f/fps); - mp_msg(MSGT_MUXER, MSGL_INFO,"INITV: %.3lf, %.3lf, fps: %.3f\r\n", (double) spriv->last_pts/27000000.0f, (double) spriv->last_dts/27000000.0f, fps); + if(is_mpeg1(stream_format) || is_mpeg2(stream_format)) + { + spriv->is_mpeg12 = 1; + spriv->is_ready = 1; + if(len) + sz = parse_mpeg12_video(s, priv, spriv, fps, len); + else + { + tmp = (uint64_t) (27000000.0f / fps); + spriv->last_pts += tmp; + spriv->last_dts += tmp; + } + } + else if(is_mpeg4(stream_format)) + { + spriv->is_mpeg12 = 0; + spriv->telecine = 0; + if(spriv->size == 0) + priv->use_psm = 1; + if(len) + sz = parse_mpeg4_video(s, priv, spriv, fps, len); + else + { + tmp = (uint64_t) (27000000.0f / fps); + spriv->last_pts += tmp; + spriv->last_dts += tmp; + } + } + + mp_msg(MSGT_MUXER, MSGL_DBG2,"mpegfile_write_chunk, Video codec=%x, len=%u, mpeg12 returned %u\n", stream_format, (uint32_t) len, (uint32_t) sz); + } + else + { // MUXER_TYPE_AUDIO + double fake_timer; + spriv->type = 0; + stream_format = s->wf->wFormatTag; + + if(s->b_buffer_size - s->b_buffer_len < len) + { + if(s->b_buffer_len > SIZE_MAX - len) + { + mp_msg(MSGT_MUXER, MSGL_FATAL, "\nFATAL! couldn't realloc, integer overflow\n"); + return; + } + s->b_buffer = realloc(s->b_buffer, len + s->b_buffer_len); + if(s->b_buffer == NULL) + { + mp_msg(MSGT_MUXER, MSGL_FATAL, "\nFATAL! couldn't realloc %d bytes\n", len + s->b_buffer_len); + return; + } + + s->b_buffer_size = len + s->b_buffer_len; + mp_msg(MSGT_MUXER, MSGL_DBG2, "REALLOC(%d) bytes to AUDIO backbuffer\n", s->b_buffer_size); + } + memcpy(&(s->b_buffer[s->b_buffer_ptr + s->b_buffer_len]), s->buffer, len); + s->b_buffer_len += len; + + if(!spriv->is_ready) + { + if(s->b_buffer_len >= 32*1024) + { + spriv->mpa_layer = analyze_mpa(s); + spriv->is_ready = 1; + } + } + else + { + parse_audio(s, 0, &nf, &fake_timer, priv->init_adelay, priv->drop); + spriv->vframes += nf; + if(! spriv->vframes) + mp_msg(MSGT_MUXER, MSGL_INFO, "AINIT: %.3lf\r\n", (double) spriv->last_pts/27000000.0f); + } } - if(is_mpeg1(stream_format) || is_mpeg2(stream_format)) - { - spriv->is_mpeg12 = 1; - spriv->is_ready = 1; - if(len) - sz = parse_mpeg12_video(s, priv, spriv, fps, len); - else { - tmp = (uint64_t) (27000000.0f / fps); - spriv->last_pts += tmp; - spriv->last_dts += tmp; - } - } - else if(is_mpeg4(stream_format)) - { - spriv->is_mpeg12 = 0; - spriv->telecine = 0; - if(spriv->size == 0) - priv->use_psm = 1; - if(len) - sz = parse_mpeg4_video(s, priv, spriv, fps, len); - else { - tmp = (uint64_t) (27000000.0f / fps); - spriv->last_pts += tmp; - spriv->last_dts += tmp; - } - } - mp_msg(MSGT_MUXER, MSGL_DBG2,"mpegfile_write_chunk, Video codec=%x, len=%u, mpeg12 returned %u\n", stream_format, (uint32_t) len, (uint32_t) sz); - } else { // MUXER_TYPE_AUDIO - double fake_timer; - spriv->type = 0; - stream_format = s->wf->wFormatTag; - - if(s->b_buffer_size - s->b_buffer_len < len) + if(spriv->psm_fixed == 0) { - if(s->b_buffer_len > SIZE_MAX - len) - { - mp_msg(MSGT_MUXER, MSGL_FATAL, "\nFATAL! couldn't realloc, integer overflow\n"); - return; - } - s->b_buffer = realloc(s->b_buffer, len + s->b_buffer_len); - if(s->b_buffer == NULL) - { - mp_msg(MSGT_MUXER, MSGL_FATAL, "\nFATAL! couldn't realloc %d bytes\n", len + s->b_buffer_len); - return; - } - - s->b_buffer_size = len + s->b_buffer_len; - mp_msg(MSGT_MUXER, MSGL_DBG2, "REALLOC(%d) bytes to AUDIO backbuffer\n", s->b_buffer_size); + add_to_psm(priv, spriv->id, stream_format); + spriv->psm_fixed = 1; + priv->psm_streams_cnt++; + if((priv->psm_streams_cnt == muxer->num_videos + muxer->num_audios) && priv->use_psm) + write_psm_block(muxer, muxer->stream); } - memcpy(&(s->b_buffer[s->b_buffer_ptr + s->b_buffer_len]), s->buffer, len); - s->b_buffer_len += len; - - if(!spriv->is_ready) - { - if(s->b_buffer_len >= 32*1024) - { - spriv->mpa_layer = analyze_mpa(s); - spriv->is_ready = 1; - } - } - else - { - parse_audio(s, 0, &nf, &fake_timer, priv->init_adelay, priv->drop); - spriv->vframes += nf; - if(! spriv->vframes) - mp_msg(MSGT_MUXER, MSGL_INFO, "AINIT: %.3lf\r\n", (double) spriv->last_pts/27000000.0f); - } - } - - if(spriv->psm_fixed == 0) { - add_to_psm(priv, spriv->id, stream_format); - spriv->psm_fixed = 1; - priv->psm_streams_cnt++; - if((priv->psm_streams_cnt == muxer->num_videos + muxer->num_audios) && priv->use_psm) - write_psm_block(muxer, muxer->stream); - } - - flush_buffers(muxer, 0); + flush_buffers(muxer, 0); } @@ -2476,236 +2479,238 @@ } } -int muxer_init_muxer_mpeg(muxer_t *muxer){ - muxer_priv_t *priv; - priv = (muxer_priv_t *) calloc(1, sizeof(muxer_priv_t)); - if(priv == NULL) - return 0; - priv->update_system_header = 1; - - //calloc() already zero-ed all flags, so we assign only the ones we need - - if(conf_mux != NULL) { - if(! strcasecmp(conf_mux, "mpeg1")) - { - priv->mux = MUX_MPEG1; - priv->packet_size = 2048; - priv->is_genmpeg1 = 1; - priv->muxrate = 1800 * 125; //Constrained parameters - } - else if(! strcasecmp(conf_mux, "dvd")) - { - priv->mux = MUX_MPEG2; - priv->is_dvd = 1; - priv->packet_size = 2048; - priv->muxrate = 10080 * 125; - } - else if(! strcasecmp(conf_mux, "xsvcd")) - { - priv->mux = MUX_MPEG2; - priv->is_xsvcd = 1; - priv->packet_size = 2324; - priv->muxrate = 150*2324; - priv->ts_allframes = 1; - } - else if(! strcasecmp(conf_mux, "xvcd")) - { - priv->mux = MUX_MPEG1; - priv->is_xvcd = 1; - priv->packet_size = 2324; - priv->muxrate = 75*2352; - priv->ts_allframes = 1; - } - else if(! strcasecmp(conf_mux, "pes1")) - { - priv->mux = MUX_MPEG1; - priv->rawpes = 1; - priv->packet_size = 2048; - priv->muxrate = 10080 * 125; - priv->ts_allframes = 1; - } - else if(! strcasecmp(conf_mux, "pes2")) - { - priv->mux = MUX_MPEG2; - priv->rawpes = 1; - priv->packet_size = 2048; - priv->muxrate = 10080 * 125; - priv->ts_allframes = 1; - } - else - { - if(strcasecmp(conf_mux, "mpeg2")) - mp_msg(MSGT_MUXER, MSGL_ERR, "Unknown format %s, default to mpeg2\n", conf_mux); - priv->mux = MUX_MPEG2; - priv->is_genmpeg2 = 1; - priv->packet_size = 2048; - priv->muxrate = 1800 * 125; //Constrained parameters - } - } - - if(conf_ts_allframes) - priv->ts_allframes = 1; - if(conf_muxrate > 0) - priv->muxrate = conf_muxrate * 125; // * 1000 / 8 - if(conf_packet_size) - priv->packet_size = conf_packet_size; - priv->delta_scr = (uint64_t) (90000.0f*300.0f*(double)priv->packet_size/(double)priv->muxrate); - mp_msg(MSGT_MUXER, MSGL_INFO, "PACKET SIZE: %u bytes, deltascr: %"PRIu64"\n", priv->packet_size, priv->delta_scr); - setup_sys_params(priv); - - if(conf_vaspect > 0) - { - int asp = (int) (conf_vaspect * 1000.0f); - if(asp >= 1332 && asp <= 1334) - priv->vaspect = ASPECT_4_3; - else if(asp >= 1776 && asp <= 1778) - priv->vaspect = ASPECT_16_9; - else if(asp >= 2209 && asp <= 2211) - priv->vaspect = ASPECT_2_21_1; - else if(asp == 1000) - priv->vaspect = ASPECT_1_1; - else - mp_msg(MSGT_MUXER, MSGL_ERR, "ERROR: unrecognized aspect %.3f\n", conf_vaspect); - } - - priv->vframerate = 0; // no change - if(conf_telecine && conf_vframerate > 0) - { - mp_msg(MSGT_MUXER, MSGL_ERR, "ERROR: options 'telecine' and 'vframerate' are mutually exclusive, vframerate disabled\n"); - conf_vframerate = 0; - } - - if(conf_telecine == TELECINE_FILM2PAL) - { - if(conf_telecine_src==0.0f) conf_telecine_src = 24000.0/1001.0; - conf_telecine_dest = 25; - conf_telecine = TELECINE_DGPULLDOWN; - } - else if(conf_telecine == PULLDOWN32) - { - if(conf_telecine_src==0.0f) conf_telecine_src = 24000.0/1001.0; - conf_telecine_dest = 30000.0/1001.0; - conf_telecine = TELECINE_DGPULLDOWN; - } - - if(conf_telecine_src>0 && conf_telecine_dest>0 && conf_telecine_src < conf_telecine_dest) - { - int sfps, tfps; +int muxer_init_muxer_mpeg(muxer_t *muxer) +{ + muxer_priv_t *priv; + priv = (muxer_priv_t *) calloc(1, sizeof(muxer_priv_t)); + if(priv == NULL) + return 0; + priv->update_system_header = 1; + + //calloc() already zero-ed all flags, so we assign only the ones we need - sfps = (int) (conf_telecine_src * 1001 + 0.5); - tfps = (int) (conf_telecine_dest * 1001 + 0.5); - if(sfps % 2 || tfps % 2) + if(conf_mux != NULL) { - sfps *= 2; - tfps *= 2; + if(! strcasecmp(conf_mux, "mpeg1")) + { + priv->mux = MUX_MPEG1; + priv->packet_size = 2048; + priv->is_genmpeg1 = 1; + priv->muxrate = 1800 * 125; //Constrained parameters + } + else if(! strcasecmp(conf_mux, "dvd")) + { + priv->mux = MUX_MPEG2; + priv->is_dvd = 1; + priv->packet_size = 2048; + priv->muxrate = 10080 * 125; + } + else if(! strcasecmp(conf_mux, "xsvcd")) + { + priv->mux = MUX_MPEG2; + priv->is_xsvcd = 1; + priv->packet_size = 2324; + priv->muxrate = 150*2324; + priv->ts_allframes = 1; + } + else if(! strcasecmp(conf_mux, "xvcd")) + { + priv->mux = MUX_MPEG1; + priv->is_xvcd = 1; + priv->packet_size = 2324; + priv->muxrate = 75*2352; + priv->ts_allframes = 1; + } + else if(! strcasecmp(conf_mux, "pes1")) + { + priv->mux = MUX_MPEG1; + priv->rawpes = 1; + priv->packet_size = 2048; + priv->muxrate = 10080 * 125; + priv->ts_allframes = 1; + } + else if(! strcasecmp(conf_mux, "pes2")) + { + priv->mux = MUX_MPEG2; + priv->rawpes = 1; + priv->packet_size = 2048; + priv->muxrate = 10080 * 125; + priv->ts_allframes = 1; + } + else + { + if(strcasecmp(conf_mux, "mpeg2")) + mp_msg(MSGT_MUXER, MSGL_ERR, "Unknown format %s, default to mpeg2\n", conf_mux); + priv->mux = MUX_MPEG2; + priv->is_genmpeg2 = 1; + priv->packet_size = 2048; + priv->muxrate = 1800 * 125; //Constrained parameters + } + } + + if(conf_ts_allframes) + priv->ts_allframes = 1; + if(conf_muxrate > 0) + priv->muxrate = conf_muxrate * 125; // * 1000 / 8 + if(conf_packet_size) + priv->packet_size = conf_packet_size; + priv->delta_scr = (uint64_t) (90000.0f*300.0f*(double)priv->packet_size/(double)priv->muxrate); + mp_msg(MSGT_MUXER, MSGL_INFO, "PACKET SIZE: %u bytes, deltascr: %"PRIu64"\n", priv->packet_size, priv->delta_scr); + setup_sys_params(priv); + + if(conf_vaspect > 0) + { + int asp = (int) (conf_vaspect * 1000.0f); + if(asp >= 1332 && asp <= 1334) + priv->vaspect = ASPECT_4_3; + else if(asp >= 1776 && asp <= 1778) + priv->vaspect = ASPECT_16_9; + else if(asp >= 2209 && asp <= 2211) + priv->vaspect = ASPECT_2_21_1; + else if(asp == 1000) + priv->vaspect = ASPECT_1_1; + else + mp_msg(MSGT_MUXER, MSGL_ERR, "ERROR: unrecognized aspect %.3f\n", conf_vaspect); + } + + priv->vframerate = 0; // no change + if(conf_telecine && conf_vframerate > 0) + { + mp_msg(MSGT_MUXER, MSGL_ERR, "ERROR: options 'telecine' and 'vframerate' are mutually exclusive, vframerate disabled\n"); + conf_vframerate = 0; + } + + if(conf_telecine == TELECINE_FILM2PAL) + { + if(conf_telecine_src==0.0f) conf_telecine_src = 24000.0/1001.0; + conf_telecine_dest = 25; + conf_telecine = TELECINE_DGPULLDOWN; + } + else if(conf_telecine == PULLDOWN32) + { + if(conf_telecine_src==0.0f) conf_telecine_src = 24000.0/1001.0; + conf_telecine_dest = 30000.0/1001.0; + conf_telecine = TELECINE_DGPULLDOWN; } - if(((tfps - sfps)>>1) > sfps) - { - mp_msg(MSGT_MUXER, MSGL_ERR, "ERROR! Framerate increment must be <= 1.5, telecining disabled\n"); - conf_telecine = 0; - } - else - { - generate_flags(sfps, tfps); - conf_telecine = TELECINE_DGPULLDOWN; - conf_vframerate = conf_telecine_dest; - } - } - - if(conf_vframerate) - { - int fps; - - fps = (int) (conf_vframerate * 1001 + 0.5); - switch(fps) + if(conf_telecine_src>0 && conf_telecine_dest>0 && conf_telecine_src < conf_telecine_dest) { - case 24000: - priv->vframerate = FRAMERATE_23976; - break; - case 24024: - priv->vframerate = FRAMERATE_24; - break; - case 25025: - priv->vframerate = FRAMERATE_25; - break; - case 30000: - priv->vframerate = FRAMERATE_2997; - break; - case 30030: - priv->vframerate = FRAMERATE_30; - break; - case 50050: - priv->vframerate = FRAMERATE_50; - break; - case 60000: - priv->vframerate = FRAMERATE_5994; - break; - case 60060: - priv->vframerate = FRAMERATE_60; - break; - default: + int sfps, tfps; + + sfps = (int) (conf_telecine_src * 1001 + 0.5); + tfps = (int) (conf_telecine_dest * 1001 + 0.5); + if(sfps % 2 || tfps % 2) { - mp_msg(MSGT_MUXER, MSGL_ERR, "WRONG FPS: %d/1000, ignoring\n", fps); - if(conf_telecine) - mp_msg(MSGT_MUXER, MSGL_ERR, "DISABLED TELECINING\n"); + sfps *= 2; + tfps *= 2; + } + + if(((tfps - sfps)>>1) > sfps) + { + mp_msg(MSGT_MUXER, MSGL_ERR, "ERROR! Framerate increment must be <= 1.5, telecining disabled\n"); conf_telecine = 0; } + else + { + generate_flags(sfps, tfps); + conf_telecine = TELECINE_DGPULLDOWN; + conf_vframerate = conf_telecine_dest; + } } - } - - priv->vwidth = (uint16_t) conf_vwidth; - priv->vheight = (uint16_t) conf_vheight; - priv->panscan_width = (uint16_t) conf_panscan_width; - priv->panscan_height = (uint16_t) conf_panscan_height; - priv->vbitrate = ((conf_vbitrate) * 10) >> 2; //*1000 / 400 - - if(priv->vaspect || priv->vframerate || priv->vwidth || priv->vheight || priv->vbitrate || priv->panscan_width || priv->panscan_height) - { - priv->patch_seq = priv->vaspect || priv->vframerate || priv->vwidth || priv->vheight || priv->vbitrate; - priv->patch_sde = priv->panscan_width || priv->panscan_height; - mp_msg(MSGT_MUXER, MSGL_INFO, "MPEG MUXER, patching"); - if(priv->vwidth || priv->vheight) - mp_msg(MSGT_MUXER, MSGL_INFO, " resolution to %dx%d", priv->vwidth, priv->vheight); - if(priv->panscan_width || priv->panscan_height) - mp_msg(MSGT_MUXER, MSGL_INFO, " panscan to to %dx%d", priv->panscan_width, priv->panscan_height); - if(priv->vframerate) - mp_msg(MSGT_MUXER, MSGL_INFO, " framerate to %s fps", framerates[priv->vframerate]); - if(priv->vaspect) - mp_msg(MSGT_MUXER, MSGL_INFO, " aspect ratio to %s", aspect_ratios[priv->vaspect]); - if(priv->vbitrate) - mp_msg(MSGT_MUXER, MSGL_INFO, " bitrate to %u", conf_vbitrate); - mp_msg(MSGT_MUXER, MSGL_INFO, "\n"); - } - - priv->has_video = priv->has_audio = 0; - - muxer->sysrate = priv->muxrate; // initial muxrate = constrained stream parameter - priv->scr = muxer->file_end = 0; - - if(conf_init_vdelay && conf_drop) - { - mp_msg(MSGT_MUXER, MSGL_ERR, "\nmuxer_mpg, :drop and :vdelay used together are not supported, exiting\n"); - return 0; - } - if(conf_init_adelay) - priv->init_adelay = - (double) conf_init_adelay / (double) 1000.0; - - priv->drop = conf_drop; - - priv->buff = (uint8_t *) malloc(priv->packet_size); - if((priv->buff == NULL)) - { - mp_msg(MSGT_MUXER, MSGL_ERR, "\nCouldn't allocate %d bytes, exit\n", priv->packet_size); - return 0; - } - - muxer->priv = (void *) priv; - muxer->cont_new_stream = &mpegfile_new_stream; - muxer->cont_write_chunk = &mpegfile_write_chunk; - muxer->cont_write_header = &mpegfile_write_header; - muxer->cont_write_index = &mpegfile_write_index; - muxer->fix_stream_parameters = &fix_parameters; - return 1; + + if(conf_vframerate) + { + int fps; + + fps = (int) (conf_vframerate * 1001 + 0.5); + switch(fps) + { + case 24000: + priv->vframerate = FRAMERATE_23976; + break; + case 24024: + priv->vframerate = FRAMERATE_24; + break; + case 25025: + priv->vframerate = FRAMERATE_25; + break; + case 30000: + priv->vframerate = FRAMERATE_2997; + break; + case 30030: + priv->vframerate = FRAMERATE_30; + break; + case 50050: + priv->vframerate = FRAMERATE_50; + break; + case 60000: + priv->vframerate = FRAMERATE_5994; + break; + case 60060: + priv->vframerate = FRAMERATE_60; + break; + default: + { + mp_msg(MSGT_MUXER, MSGL_ERR, "WRONG FPS: %d/1000, ignoring\n", fps); + if(conf_telecine) + mp_msg(MSGT_MUXER, MSGL_ERR, "DISABLED TELECINING\n"); + conf_telecine = 0; + } + } + } + + priv->vwidth = (uint16_t) conf_vwidth; + priv->vheight = (uint16_t) conf_vheight; + priv->panscan_width = (uint16_t) conf_panscan_width; + priv->panscan_height = (uint16_t) conf_panscan_height; + priv->vbitrate = ((conf_vbitrate) * 10) >> 2; //*1000 / 400 + + if(priv->vaspect || priv->vframerate || priv->vwidth || priv->vheight || priv->vbitrate || priv->panscan_width || priv->panscan_height) + { + priv->patch_seq = priv->vaspect || priv->vframerate || priv->vwidth || priv->vheight || priv->vbitrate; + priv->patch_sde = priv->panscan_width || priv->panscan_height; + mp_msg(MSGT_MUXER, MSGL_INFO, "MPEG MUXER, patching"); + if(priv->vwidth || priv->vheight) + mp_msg(MSGT_MUXER, MSGL_INFO, " resolution to %dx%d", priv->vwidth, priv->vheight); + if(priv->panscan_width || priv->panscan_height) + mp_msg(MSGT_MUXER, MSGL_INFO, " panscan to to %dx%d", priv->panscan_width, priv->panscan_height); + if(priv->vframerate) + mp_msg(MSGT_MUXER, MSGL_INFO, " framerate to %s fps", framerates[priv->vframerate]); + if(priv->vaspect) + mp_msg(MSGT_MUXER, MSGL_INFO, " aspect ratio to %s", aspect_ratios[priv->vaspect]); + if(priv->vbitrate) + mp_msg(MSGT_MUXER, MSGL_INFO, " bitrate to %u", conf_vbitrate); + mp_msg(MSGT_MUXER, MSGL_INFO, "\n"); + } + + priv->has_video = priv->has_audio = 0; + + muxer->sysrate = priv->muxrate; // initial muxrate = constrained stream parameter + priv->scr = muxer->file_end = 0; + + if(conf_init_vdelay && conf_drop) + { + mp_msg(MSGT_MUXER, MSGL_ERR, "\nmuxer_mpg, :drop and :vdelay used together are not supported, exiting\n"); + return 0; + } + if(conf_init_adelay) + priv->init_adelay = - (double) conf_init_adelay / (double) 1000.0; + + priv->drop = conf_drop; + + priv->buff = (uint8_t *) malloc(priv->packet_size); + if((priv->buff == NULL)) + { + mp_msg(MSGT_MUXER, MSGL_ERR, "\nCouldn't allocate %d bytes, exit\n", priv->packet_size); + return 0; + } + + muxer->priv = (void *) priv; + muxer->cont_new_stream = &mpegfile_new_stream; + muxer->cont_write_chunk = &mpegfile_write_chunk; + muxer->cont_write_header = &mpegfile_write_header; + muxer->cont_write_index = &mpegfile_write_index; + muxer->fix_stream_parameters = &fix_parameters; + return 1; }