2227
2226
spriv->max_buffer_size = 16*1024;
2229
2228
else if(stream->wf->wFormatTag == AUDIO_AAC1 || stream->wf->wFormatTag == AUDIO_AAC2)
2233
2230
else if(stream->wf->wFormatTag == AUDIO_MP2 || stream->wf->wFormatTag == AUDIO_MP3)
2234
2231
spriv->is_ready = 0;
2235
stream_format = stream->bih->biCompression;
2238
2236
if(conf_vbuf_size)
2239
2237
spriv->max_buffer_size = conf_vbuf_size*1024;
2243
spriv->max_buffer_size = 232*1024;
2244
else if(priv->is_xsvcd)
2245
spriv->max_buffer_size = 230*1024;
2246
else if(priv->is_xvcd)
2247
spriv->max_buffer_size = 46*1024;
2249
spriv->max_buffer_size = 232*1024; //no profile => unconstrained :) FIXME!!!
2241
spriv->max_buffer_size = 232*1024;
2242
else if(priv->is_xsvcd)
2243
spriv->max_buffer_size = 230*1024;
2244
else if(priv->is_xvcd)
2245
spriv->max_buffer_size = 46*1024;
2247
spriv->max_buffer_size = 232*1024; //no profile => unconstrained :) FIXME!!!
2252
2250
if(is_mpeg4(stream->bih->biCompression))
2253
2251
spriv->is_ready = 0;
2255
2253
spriv->is_ready = 1;
2260
static void mpegfile_write_chunk(muxer_stream_t *s,size_t len,unsigned int flags, double dts_arg, double pts_arg){
2263
muxer_t *muxer = s->muxer;
2264
muxer_priv_t *priv = (muxer_priv_t *)muxer->priv;
2265
muxer_headers_t *spriv = (muxer_headers_t*) s->priv;
2267
uint32_t stream_format, nf;
2269
if(s->buffer == NULL)
2274
if (s->type == MUXER_TYPE_VIDEO) { // try to recognize frame type...
2275
fps = (float) s->h.dwRate/ (float) s->h.dwScale;
2277
stream_format = s->bih->biCompression;
2278
if(! spriv->vframes)
2280
spriv->last_dts = spriv->last_pts - (uint64_t)(27000000.0f/fps);
2281
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);
2284
if(is_mpeg1(stream_format) || is_mpeg2(stream_format))
2286
spriv->is_mpeg12 = 1;
2287
spriv->is_ready = 1;
2289
sz = parse_mpeg12_video(s, priv, spriv, fps, len);
2291
tmp = (uint64_t) (27000000.0f / fps);
2292
spriv->last_pts += tmp;
2293
spriv->last_dts += tmp;
2296
else if(is_mpeg4(stream_format))
2298
spriv->is_mpeg12 = 0;
2299
spriv->telecine = 0;
2300
if(spriv->size == 0)
2303
sz = parse_mpeg4_video(s, priv, spriv, fps, len);
2305
tmp = (uint64_t) (27000000.0f / fps);
2306
spriv->last_pts += tmp;
2307
spriv->last_dts += tmp;
2311
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);
2312
} else { // MUXER_TYPE_AUDIO
2315
stream_format = s->wf->wFormatTag;
2317
if(s->b_buffer_size - s->b_buffer_len < len)
2319
if(s->b_buffer_len > SIZE_MAX - len)
2321
mp_msg(MSGT_MUXER, MSGL_FATAL, "\nFATAL! couldn't realloc, integer overflow\n");
2324
s->b_buffer = realloc(s->b_buffer, len + s->b_buffer_len);
2325
if(s->b_buffer == NULL)
2327
mp_msg(MSGT_MUXER, MSGL_FATAL, "\nFATAL! couldn't realloc %d bytes\n", len + s->b_buffer_len);
2331
s->b_buffer_size = len + s->b_buffer_len;
2332
mp_msg(MSGT_MUXER, MSGL_DBG2, "REALLOC(%d) bytes to AUDIO backbuffer\n", s->b_buffer_size);
2334
memcpy(&(s->b_buffer[s->b_buffer_ptr + s->b_buffer_len]), s->buffer, len);
2335
s->b_buffer_len += len;
2255
if(!is_mpeg1(stream_format) && !is_mpeg2(stream_format))
2337
if(!spriv->is_ready)
2259
if(priv->is_genmpeg2 && needs_psm)
2339
if(s->b_buffer_len >= 32*1024)
2341
spriv->mpa_layer = analyze_mpa(s);
2262
add_to_psm(priv, spriv->id, stream_format);
2263
priv->psm_streams_cnt++;
2268
static void mpegfile_write_chunk(muxer_stream_t *s,size_t len,unsigned int flags, double dts_arg, double pts_arg)
2272
muxer_t *muxer = s->muxer;
2273
muxer_priv_t *priv = (muxer_priv_t *)muxer->priv;
2274
muxer_headers_t *spriv = (muxer_headers_t*) s->priv;
2276
uint32_t stream_format, nf;
2278
if(s->buffer == NULL || len == -1)
2281
if (s->type == MUXER_TYPE_VIDEO)
2282
{ // try to recognize frame type...
2283
fps = (float) s->h.dwRate/ (float) s->h.dwScale;
2285
stream_format = s->bih->biCompression;
2286
if(! spriv->vframes)
2288
spriv->last_dts = spriv->last_pts - (uint64_t)(27000000.0f/fps);
2289
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);
2292
if(is_mpeg1(stream_format) || is_mpeg2(stream_format))
2294
spriv->is_mpeg12 = 1;
2342
2295
spriv->is_ready = 1;
2297
sz = parse_mpeg12_video(s, priv, spriv, fps, len);
2300
tmp = (uint64_t) (27000000.0f / fps);
2301
spriv->last_pts += tmp;
2302
spriv->last_dts += tmp;
2305
else if(is_mpeg4(stream_format))
2307
spriv->is_mpeg12 = 0;
2308
spriv->telecine = 0;
2310
sz = parse_mpeg4_video(s, priv, spriv, fps, len);
2313
tmp = (uint64_t) (27000000.0f / fps);
2314
spriv->last_pts += tmp;
2315
spriv->last_dts += tmp;
2319
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);
2347
parse_audio(s, 0, &nf, &fake_timer, priv->init_adelay, priv->drop);
2348
spriv->vframes += nf;
2349
if(! spriv->vframes)
2350
mp_msg(MSGT_MUXER, MSGL_INFO, "AINIT: %.3lf\r\n", (double) spriv->last_pts/27000000.0f);
2322
{ // MUXER_TYPE_AUDIO
2325
stream_format = s->wf->wFormatTag;
2327
if(s->b_buffer_size - s->b_buffer_len < len)
2331
if(s->b_buffer_len > SIZE_MAX - len)
2333
mp_msg(MSGT_MUXER, MSGL_FATAL, "\nFATAL! couldn't realloc, integer overflow\n");
2336
tmp = realloc(s->b_buffer, len + s->b_buffer_len);
2339
mp_msg(MSGT_MUXER, MSGL_FATAL, "\nFATAL! couldn't realloc %d bytes\n", len + s->b_buffer_len);
2344
s->b_buffer_size = len + s->b_buffer_len;
2345
mp_msg(MSGT_MUXER, MSGL_DBG2, "REALLOC(%d) bytes to AUDIO backbuffer\n", s->b_buffer_size);
2347
memcpy(&(s->b_buffer[s->b_buffer_ptr + s->b_buffer_len]), s->buffer, len);
2348
s->b_buffer_len += len;
2350
if(!spriv->is_ready)
2352
if(s->b_buffer_len >= 32*1024)
2354
spriv->mpa_layer = analyze_mpa(s);
2355
spriv->is_ready = 1;
2360
parse_audio(s, 0, &nf, &fake_timer, priv->init_adelay, priv->drop);
2361
spriv->vframes += nf;
2362
if(! spriv->vframes)
2363
mp_msg(MSGT_MUXER, MSGL_INFO, "AINIT: %.3lf\r\n", (double) spriv->last_pts/27000000.0f);
2355
if(spriv->psm_fixed == 0) {
2356
add_to_psm(priv, spriv->id, stream_format);
2357
spriv->psm_fixed = 1;
2358
priv->psm_streams_cnt++;
2359
if((priv->psm_streams_cnt == muxer->num_videos + muxer->num_audios) && priv->use_psm)
2360
write_psm_block(muxer, muxer->stream);
2363
flush_buffers(muxer, 0);
2367
flush_buffers(muxer, 0);
2479
int muxer_init_muxer_mpeg(muxer_t *muxer){
2481
priv = (muxer_priv_t *) calloc(1, sizeof(muxer_priv_t));
2484
priv->update_system_header = 1;
2486
//calloc() already zero-ed all flags, so we assign only the ones we need
2488
if(conf_mux != NULL) {
2489
if(! strcasecmp(conf_mux, "mpeg1"))
2491
priv->mux = MUX_MPEG1;
2492
priv->packet_size = 2048;
2493
priv->is_genmpeg1 = 1;
2494
priv->muxrate = 1800 * 125; //Constrained parameters
2496
else if(! strcasecmp(conf_mux, "dvd"))
2498
priv->mux = MUX_MPEG2;
2500
priv->packet_size = 2048;
2501
priv->muxrate = 10080 * 125;
2503
else if(! strcasecmp(conf_mux, "xsvcd"))
2505
priv->mux = MUX_MPEG2;
2507
priv->packet_size = 2324;
2508
priv->muxrate = 150*2324;
2509
priv->ts_allframes = 1;
2511
else if(! strcasecmp(conf_mux, "xvcd"))
2513
priv->mux = MUX_MPEG1;
2515
priv->packet_size = 2324;
2516
priv->muxrate = 75*2352;
2517
priv->ts_allframes = 1;
2519
else if(! strcasecmp(conf_mux, "pes1"))
2521
priv->mux = MUX_MPEG1;
2523
priv->packet_size = 2048;
2524
priv->muxrate = 10080 * 125;
2525
priv->ts_allframes = 1;
2527
else if(! strcasecmp(conf_mux, "pes2"))
2529
priv->mux = MUX_MPEG2;
2531
priv->packet_size = 2048;
2532
priv->muxrate = 10080 * 125;
2533
priv->ts_allframes = 1;
2537
if(strcasecmp(conf_mux, "mpeg2"))
2538
mp_msg(MSGT_MUXER, MSGL_ERR, "Unknown format %s, default to mpeg2\n", conf_mux);
2539
priv->mux = MUX_MPEG2;
2540
priv->is_genmpeg2 = 1;
2541
priv->packet_size = 2048;
2542
priv->muxrate = 1800 * 125; //Constrained parameters
2546
if(conf_ts_allframes)
2547
priv->ts_allframes = 1;
2548
if(conf_muxrate > 0)
2549
priv->muxrate = conf_muxrate * 125; // * 1000 / 8
2550
if(conf_packet_size)
2551
priv->packet_size = conf_packet_size;
2552
priv->delta_scr = (uint64_t) (90000.0f*300.0f*(double)priv->packet_size/(double)priv->muxrate);
2553
mp_msg(MSGT_MUXER, MSGL_INFO, "PACKET SIZE: %u bytes, deltascr: %"PRIu64"\n", priv->packet_size, priv->delta_scr);
2554
setup_sys_params(priv);
2556
if(conf_vaspect > 0)
2558
int asp = (int) (conf_vaspect * 1000.0f);
2559
if(asp >= 1332 && asp <= 1334)
2560
priv->vaspect = ASPECT_4_3;
2561
else if(asp >= 1776 && asp <= 1778)
2562
priv->vaspect = ASPECT_16_9;
2563
else if(asp >= 2209 && asp <= 2211)
2564
priv->vaspect = ASPECT_2_21_1;
2565
else if(asp == 1000)
2566
priv->vaspect = ASPECT_1_1;
2568
mp_msg(MSGT_MUXER, MSGL_ERR, "ERROR: unrecognized aspect %.3f\n", conf_vaspect);
2571
priv->vframerate = 0; // no change
2572
if(conf_telecine && conf_vframerate > 0)
2574
mp_msg(MSGT_MUXER, MSGL_ERR, "ERROR: options 'telecine' and 'vframerate' are mutually exclusive, vframerate disabled\n");
2575
conf_vframerate = 0;
2578
if(conf_telecine == TELECINE_FILM2PAL)
2580
if(conf_telecine_src==0.0f) conf_telecine_src = 24000.0/1001.0;
2581
conf_telecine_dest = 25;
2582
conf_telecine = TELECINE_DGPULLDOWN;
2584
else if(conf_telecine == PULLDOWN32)
2586
if(conf_telecine_src==0.0f) conf_telecine_src = 24000.0/1001.0;
2587
conf_telecine_dest = 30000.0/1001.0;
2588
conf_telecine = TELECINE_DGPULLDOWN;
2591
if(conf_telecine_src>0 && conf_telecine_dest>0 && conf_telecine_src < conf_telecine_dest)
2595
sfps = (int) (conf_telecine_src * 1001 + 0.5);
2596
tfps = (int) (conf_telecine_dest * 1001 + 0.5);
2597
if(sfps % 2 || tfps % 2)
2603
if(((tfps - sfps)>>1) > sfps)
2605
mp_msg(MSGT_MUXER, MSGL_ERR, "ERROR! Framerate increment must be <= 1.5, telecining disabled\n");
2610
generate_flags(sfps, tfps);
2611
conf_telecine = TELECINE_DGPULLDOWN;
2612
conf_vframerate = conf_telecine_dest;
2620
fps = (int) (conf_vframerate * 1001 + 0.5);
2624
priv->vframerate = FRAMERATE_23976;
2627
priv->vframerate = FRAMERATE_24;
2630
priv->vframerate = FRAMERATE_25;
2633
priv->vframerate = FRAMERATE_2997;
2636
priv->vframerate = FRAMERATE_30;
2639
priv->vframerate = FRAMERATE_50;
2642
priv->vframerate = FRAMERATE_5994;
2645
priv->vframerate = FRAMERATE_60;
2649
mp_msg(MSGT_MUXER, MSGL_ERR, "WRONG FPS: %d/1000, ignoring\n", fps);
2651
mp_msg(MSGT_MUXER, MSGL_ERR, "DISABLED TELECINING\n");
2483
int muxer_init_muxer_mpeg(muxer_t *muxer)
2486
priv = (muxer_priv_t *) calloc(1, sizeof(muxer_priv_t));
2489
priv->update_system_header = 1;
2491
//calloc() already zero-ed all flags, so we assign only the ones we need
2493
if(conf_mux != NULL)
2495
if(! strcasecmp(conf_mux, "mpeg1"))
2497
priv->mux = MUX_MPEG1;
2498
priv->packet_size = 2048;
2499
priv->is_genmpeg1 = 1;
2500
priv->muxrate = 1800 * 125; //Constrained parameters
2502
else if(! strcasecmp(conf_mux, "dvd"))
2504
priv->mux = MUX_MPEG2;
2506
priv->packet_size = 2048;
2507
priv->muxrate = 10080 * 125;
2509
else if(! strcasecmp(conf_mux, "xsvcd"))
2511
priv->mux = MUX_MPEG2;
2513
priv->packet_size = 2324;
2514
priv->muxrate = 150*2324;
2515
priv->ts_allframes = 1;
2517
else if(! strcasecmp(conf_mux, "xvcd"))
2519
priv->mux = MUX_MPEG1;
2521
priv->packet_size = 2324;
2522
priv->muxrate = 75*2352;
2523
priv->ts_allframes = 1;
2525
else if(! strcasecmp(conf_mux, "pes1"))
2527
priv->mux = MUX_MPEG1;
2529
priv->packet_size = 2048;
2530
priv->muxrate = 10080 * 125;
2531
priv->ts_allframes = 1;
2533
else if(! strcasecmp(conf_mux, "pes2"))
2535
priv->mux = MUX_MPEG2;
2537
priv->packet_size = 2048;
2538
priv->muxrate = 10080 * 125;
2539
priv->ts_allframes = 1;
2543
if(strcasecmp(conf_mux, "mpeg2"))
2544
mp_msg(MSGT_MUXER, MSGL_ERR, "Unknown format %s, default to mpeg2\n", conf_mux);
2545
priv->mux = MUX_MPEG2;
2546
priv->is_genmpeg2 = 1;
2547
priv->packet_size = 2048;
2548
priv->muxrate = 1800 * 125; //Constrained parameters
2552
if(conf_ts_allframes)
2553
priv->ts_allframes = 1;
2554
if(conf_muxrate > 0)
2555
priv->muxrate = conf_muxrate * 125; // * 1000 / 8
2556
if(conf_packet_size)
2557
priv->packet_size = conf_packet_size;
2558
priv->delta_scr = (uint64_t) (90000.0f*300.0f*(double)priv->packet_size/(double)priv->muxrate);
2559
mp_msg(MSGT_MUXER, MSGL_INFO, "PACKET SIZE: %u bytes, deltascr: %"PRIu64"\n", priv->packet_size, priv->delta_scr);
2560
setup_sys_params(priv);
2562
if(conf_vaspect > 0)
2564
int asp = (int) (conf_vaspect * 1000.0f);
2565
if(asp >= 1332 && asp <= 1334)
2566
priv->vaspect = ASPECT_4_3;
2567
else if(asp >= 1776 && asp <= 1778)
2568
priv->vaspect = ASPECT_16_9;
2569
else if(asp >= 2209 && asp <= 2211)
2570
priv->vaspect = ASPECT_2_21_1;
2571
else if(asp == 1000)
2572
priv->vaspect = ASPECT_1_1;
2574
mp_msg(MSGT_MUXER, MSGL_ERR, "ERROR: unrecognized aspect %.3f\n", conf_vaspect);
2577
priv->vframerate = 0; // no change
2578
if(conf_telecine && conf_vframerate > 0)
2580
mp_msg(MSGT_MUXER, MSGL_ERR, "ERROR: options 'telecine' and 'vframerate' are mutually exclusive, vframerate disabled\n");
2581
conf_vframerate = 0;
2584
if(conf_telecine == TELECINE_FILM2PAL)
2586
if(conf_telecine_src==0.0f) conf_telecine_src = 24000.0/1001.0;
2587
conf_telecine_dest = 25;
2588
conf_telecine = TELECINE_DGPULLDOWN;
2590
else if(conf_telecine == PULLDOWN32)
2592
if(conf_telecine_src==0.0f) conf_telecine_src = 24000.0/1001.0;
2593
conf_telecine_dest = 30000.0/1001.0;
2594
conf_telecine = TELECINE_DGPULLDOWN;
2597
if(conf_telecine_src>0 && conf_telecine_dest>0 && conf_telecine_src < conf_telecine_dest)
2601
sfps = (int) (conf_telecine_src * 1001 + 0.5);
2602
tfps = (int) (conf_telecine_dest * 1001 + 0.5);
2603
if(sfps % 2 || tfps % 2)
2609
if(((tfps - sfps)>>1) > sfps)
2611
mp_msg(MSGT_MUXER, MSGL_ERR, "ERROR! Framerate increment must be <= 1.5, telecining disabled\n");
2652
2612
conf_telecine = 0;
2657
priv->vwidth = (uint16_t) conf_vwidth;
2658
priv->vheight = (uint16_t) conf_vheight;
2659
priv->panscan_width = (uint16_t) conf_panscan_width;
2660
priv->panscan_height = (uint16_t) conf_panscan_height;
2661
priv->vbitrate = ((conf_vbitrate) * 10) >> 2; //*1000 / 400
2663
if(priv->vaspect || priv->vframerate || priv->vwidth || priv->vheight || priv->vbitrate || priv->panscan_width || priv->panscan_height)
2665
priv->patch_seq = priv->vaspect || priv->vframerate || priv->vwidth || priv->vheight || priv->vbitrate;
2666
priv->patch_sde = priv->panscan_width || priv->panscan_height;
2667
mp_msg(MSGT_MUXER, MSGL_INFO, "MPEG MUXER, patching");
2668
if(priv->vwidth || priv->vheight)
2669
mp_msg(MSGT_MUXER, MSGL_INFO, " resolution to %dx%d", priv->vwidth, priv->vheight);
2670
if(priv->panscan_width || priv->panscan_height)
2671
mp_msg(MSGT_MUXER, MSGL_INFO, " panscan to to %dx%d", priv->panscan_width, priv->panscan_height);
2672
if(priv->vframerate)
2673
mp_msg(MSGT_MUXER, MSGL_INFO, " framerate to %s fps", framerates[priv->vframerate]);
2675
mp_msg(MSGT_MUXER, MSGL_INFO, " aspect ratio to %s", aspect_ratios[priv->vaspect]);
2677
mp_msg(MSGT_MUXER, MSGL_INFO, " bitrate to %u", conf_vbitrate);
2678
mp_msg(MSGT_MUXER, MSGL_INFO, "\n");
2681
priv->has_video = priv->has_audio = 0;
2683
muxer->sysrate = priv->muxrate; // initial muxrate = constrained stream parameter
2684
priv->scr = muxer->file_end = 0;
2686
if(conf_init_vdelay && conf_drop)
2688
mp_msg(MSGT_MUXER, MSGL_ERR, "\nmuxer_mpg, :drop and :vdelay used together are not supported, exiting\n");
2691
if(conf_init_adelay)
2692
priv->init_adelay = - (double) conf_init_adelay / (double) 1000.0;
2694
priv->drop = conf_drop;
2696
priv->buff = (uint8_t *) malloc(priv->packet_size);
2697
if((priv->buff == NULL))
2699
mp_msg(MSGT_MUXER, MSGL_ERR, "\nCouldn't allocate %d bytes, exit\n", priv->packet_size);
2703
muxer->priv = (void *) priv;
2704
muxer->cont_new_stream = &mpegfile_new_stream;
2705
muxer->cont_write_chunk = &mpegfile_write_chunk;
2706
muxer->cont_write_header = &mpegfile_write_header;
2707
muxer->cont_write_index = &mpegfile_write_index;
2708
muxer->fix_stream_parameters = &fix_parameters;
2616
generate_flags(priv->bff_mask, sfps, tfps);
2617
conf_telecine = TELECINE_DGPULLDOWN;
2618
conf_vframerate = conf_telecine_dest;
2626
fps = (int) (conf_vframerate * 1001 + 0.5);
2630
priv->vframerate = FRAMERATE_23976;
2633
priv->vframerate = FRAMERATE_24;
2636
priv->vframerate = FRAMERATE_25;
2639
priv->vframerate = FRAMERATE_2997;
2642
priv->vframerate = FRAMERATE_30;
2645
priv->vframerate = FRAMERATE_50;
2648
priv->vframerate = FRAMERATE_5994;
2651
priv->vframerate = FRAMERATE_60;
2655
mp_msg(MSGT_MUXER, MSGL_ERR, "WRONG FPS: %d/1000, ignoring\n", fps);
2657
mp_msg(MSGT_MUXER, MSGL_ERR, "DISABLED TELECINING\n");
2663
priv->vwidth = (uint16_t) conf_vwidth;
2664
priv->vheight = (uint16_t) conf_vheight;
2665
priv->panscan_width = (uint16_t) conf_panscan_width;
2666
priv->panscan_height = (uint16_t) conf_panscan_height;
2667
priv->vbitrate = ((conf_vbitrate) * 10) >> 2; //*1000 / 400
2669
if(priv->vaspect || priv->vframerate || priv->vwidth || priv->vheight || priv->vbitrate || priv->panscan_width || priv->panscan_height)
2671
priv->patch_seq = priv->vaspect || priv->vframerate || priv->vwidth || priv->vheight || priv->vbitrate;
2672
priv->patch_sde = priv->panscan_width || priv->panscan_height;
2673
mp_msg(MSGT_MUXER, MSGL_INFO, "MPEG MUXER, patching");
2674
if(priv->vwidth || priv->vheight)
2675
mp_msg(MSGT_MUXER, MSGL_INFO, " resolution to %dx%d", priv->vwidth, priv->vheight);
2676
if(priv->panscan_width || priv->panscan_height)
2677
mp_msg(MSGT_MUXER, MSGL_INFO, " panscan to to %dx%d", priv->panscan_width, priv->panscan_height);
2678
if(priv->vframerate)
2679
mp_msg(MSGT_MUXER, MSGL_INFO, " framerate to %s fps", framerates[priv->vframerate]);
2681
mp_msg(MSGT_MUXER, MSGL_INFO, " aspect ratio to %s", aspect_ratios[priv->vaspect]);
2683
mp_msg(MSGT_MUXER, MSGL_INFO, " bitrate to %u", conf_vbitrate);
2684
mp_msg(MSGT_MUXER, MSGL_INFO, "\n");
2687
priv->has_video = priv->has_audio = 0;
2689
muxer->sysrate = priv->muxrate; // initial muxrate = constrained stream parameter
2690
priv->scr = muxer->file_end = 0;
2692
if(conf_init_vdelay && conf_drop)
2694
mp_msg(MSGT_MUXER, MSGL_ERR, "\nmuxer_mpg, :drop and :vdelay used together are not supported, exiting\n");
2697
if(conf_init_adelay)
2698
priv->init_adelay = - (double) conf_init_adelay / (double) 1000.0;
2700
priv->drop = conf_drop;
2702
priv->buff = (uint8_t *) malloc(priv->packet_size);
2703
if((priv->buff == NULL))
2705
mp_msg(MSGT_MUXER, MSGL_ERR, "\nCouldn't allocate %d bytes, exit\n", priv->packet_size);
2709
muxer->priv = (void *) priv;
2710
muxer->cont_new_stream = &mpegfile_new_stream;
2711
muxer->cont_write_chunk = &mpegfile_write_chunk;
2712
muxer->cont_write_header = &mpegfile_write_header;
2713
muxer->cont_write_index = &mpegfile_write_index;
2714
muxer->fix_stream_parameters = &fix_parameters;