1 /* GStreamer mpeg2enc (mjpegtools) wrapper
2 * (c) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
4 * gstmpeg2encoptions.cc: gobject/mpeg2enc option wrapping class
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Library General Public License for more details.
16 * You should have received a copy of the GNU Library General Public
17 * License along with this library; if not, write to the
18 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
19 * Boston, MA 02110-1301, USA.
26 #include "gstmpeg2encoptions.hh"
28 # include <windows.h> //For GetSystemInfo
34 * Property enumeration.
48 ARG_MOTION_SEARCH_RADIUS,
57 ARG_QUANTISATION_REDUCTION,
58 ARG_QUANT_REDUCTION_MAX_VAR,
59 ARG_INTRA_DC_PRECISION,
62 ARG_QUANTISATION_MATRIX,
67 ARG_SEQUENCE_HEADER_EVERY_GOP,
68 ARG_PLAYBACK_FIELD_ORDER,
77 /* MPEG1 VCD bitrate is used as default (also by mpeg2enc) */
78 #define DEFAULT_BITRATE 1125
81 * Property enumeration types.
84 /* FIXME: nick/name perhaps to be reversed (?) */
86 #define GST_TYPE_MPEG2ENC_FORMAT \
87 (gst_mpeg2enc_format_get_type ())
90 gst_mpeg2enc_format_get_type (void)
92 static GType mpeg2enc_format_type = 0;
94 if (!mpeg2enc_format_type) {
95 static const GEnumValue mpeg2enc_formats[] = {
96 {MPEG_FORMAT_MPEG1, "Generic MPEG-1", "0"},
97 {MPEG_FORMAT_VCD, "Standard VCD", "1"},
98 {MPEG_FORMAT_VCD_NSR, "User VCD", "2"},
99 {MPEG_FORMAT_MPEG2, "Generic MPEG-2", "3"},
100 {MPEG_FORMAT_SVCD, "Standard SVCD", "4"},
101 {MPEG_FORMAT_SVCD_NSR, "User SVCD", "5"},
102 {MPEG_FORMAT_VCD_STILL, "VCD Stills sequences", "6"},
103 {MPEG_FORMAT_SVCD_STILL, "SVCD Stills sequences", "7"},
104 {MPEG_FORMAT_DVD_NAV, "DVD MPEG-2 for dvdauthor", "8"},
105 {MPEG_FORMAT_DVD, "DVD MPEG-2", "9"},
106 #ifdef MPEG_FORMAT_ATSC1080i
107 {MPEG_FORMAT_ATSC480i, "ATSC 480i", "10"},
108 {MPEG_FORMAT_ATSC480p, "ATSC 480p", "11"},
109 {MPEG_FORMAT_ATSC720p, "ATSC 720p", "12"},
110 {MPEG_FORMAT_ATSC1080i, "ATSC 1080i", "13"},
115 mpeg2enc_format_type =
116 g_enum_register_static ("GstMpeg2encFormat", mpeg2enc_formats);
119 return mpeg2enc_format_type;
122 #define GST_TYPE_MPEG2ENC_FRAMERATE \
123 (gst_mpeg2enc_framerate_get_type ())
126 gst_mpeg2enc_framerate_get_type (void)
128 static GType mpeg2enc_framerate_type = 0;
130 if (!mpeg2enc_framerate_type) {
131 static const GEnumValue mpeg2enc_framerates[] = {
132 {0, "Same as input", "0"},
133 {1, "24/1.001 (NTSC 3:2 pulldown converted film)", "1"},
134 {2, "24 (native film)", "2"},
135 {3, "25 (PAL/SECAM video)", "3"},
136 {4, "30/1.001 (NTSC video)", "4"},
138 {6, "50 (PAL/SECAM fields)", "6"},
139 {7, "60/1.001 (NTSC fields)", "7"},
144 mpeg2enc_framerate_type =
145 g_enum_register_static ("GstMpeg2encFramerate", mpeg2enc_framerates);
148 return mpeg2enc_framerate_type;
151 #define GST_TYPE_MPEG2ENC_ASPECT \
152 (gst_mpeg2enc_aspect_get_type ())
155 gst_mpeg2enc_aspect_get_type (void)
157 static GType mpeg2enc_aspect_type = 0;
159 if (!mpeg2enc_aspect_type) {
160 static const GEnumValue mpeg2enc_aspects[] = {
161 {0, "Deduce from input", "0"},
169 mpeg2enc_aspect_type =
170 g_enum_register_static ("GstMpeg2encAspect", mpeg2enc_aspects);
173 return mpeg2enc_aspect_type;
176 #define GST_TYPE_MPEG2ENC_INTERLACE_MODE \
177 (gst_mpeg2enc_interlace_mode_get_type ())
180 gst_mpeg2enc_interlace_mode_get_type (void)
182 static GType mpeg2enc_interlace_mode_type = 0;
184 if (!mpeg2enc_interlace_mode_type) {
185 static const GEnumValue mpeg2enc_interlace_modes[] = {
186 {-1, "Format default mode", "-1"},
187 {0, "Progressive", "0"},
188 {1, "Interlaced, per-frame encoding", "1"},
189 {2, "Interlaced, per-field-encoding", "2"},
193 mpeg2enc_interlace_mode_type =
194 g_enum_register_static ("GstMpeg2encInterlaceMode",
195 mpeg2enc_interlace_modes);
198 return mpeg2enc_interlace_mode_type;
201 #define GST_TYPE_MPEG2ENC_QUANTISATION_MATRIX \
202 (gst_mpeg2enc_quantisation_matrix_get_type ())
204 #define GST_MPEG2ENC_QUANTISATION_MATRIX_DEFAULT 0
205 #define GST_MPEG2ENC_QUANTISATION_MATRIX_HI_RES 1
206 #define GST_MPEG2ENC_QUANTISATION_MATRIX_KVCD 2
207 #define GST_MPEG2ENC_QUANTISATION_MATRIX_TMPGENC 3
210 gst_mpeg2enc_quantisation_matrix_get_type (void)
212 static GType mpeg2enc_quantisation_matrix_type = 0;
214 if (!mpeg2enc_quantisation_matrix_type) {
215 static const GEnumValue mpeg2enc_quantisation_matrixes[] = {
216 {GST_MPEG2ENC_QUANTISATION_MATRIX_DEFAULT,
218 {GST_MPEG2ENC_QUANTISATION_MATRIX_HI_RES,
219 "High resolution", "1"},
220 {GST_MPEG2ENC_QUANTISATION_MATRIX_KVCD,
222 {GST_MPEG2ENC_QUANTISATION_MATRIX_TMPGENC,
227 mpeg2enc_quantisation_matrix_type =
228 g_enum_register_static ("GstMpeg2encQuantisationMatrix",
229 mpeg2enc_quantisation_matrixes);
232 return mpeg2enc_quantisation_matrix_type;
235 #define GST_TYPE_MPEG2ENC_VIDEO_NORM \
236 (gst_mpeg2enc_video_norm_get_type ())
239 gst_mpeg2enc_video_norm_get_type (void)
241 static GType mpeg2enc_video_norm_type = 0;
243 if (!mpeg2enc_video_norm_type) {
244 static const GEnumValue mpeg2enc_video_norms[] = {
245 {0, "Unspecified", "0"},
252 mpeg2enc_video_norm_type =
253 g_enum_register_static ("GstMpeg2encVideoNorm", mpeg2enc_video_norms);
256 return mpeg2enc_video_norm_type;
259 #define GST_TYPE_MPEG2ENC_PLAYBACK_FIELD_ORDER \
260 (gst_mpeg2enc_playback_field_order_get_type ())
263 gst_mpeg2enc_playback_field_order_get_type (void)
265 static GType mpeg2enc_playback_field_order_type = 0;
267 if (!mpeg2enc_playback_field_order_type) {
268 static const GEnumValue mpeg2enc_playback_field_orders[] = {
269 {Y4M_UNKNOWN, "Unspecified", "0"},
270 {Y4M_ILACE_TOP_FIRST, "Top-field first", "1"},
271 {Y4M_ILACE_BOTTOM_FIRST, "Bottom-field first", "2"},
275 mpeg2enc_playback_field_order_type =
276 g_enum_register_static ("GstMpeg2encPlaybackFieldOrders",
277 mpeg2enc_playback_field_orders);
280 return mpeg2enc_playback_field_order_type;
287 GstMpeg2EncOptions::GstMpeg2EncOptions ():
290 /* autodetect number of CPUs */
292 num_cpus = sysconf (_SC_NPROCESSORS_ONLN);
296 num_cpus = si.dwNumberOfProcessors;
303 /* set some default(s) not set in base class */
304 bitrate = DEFAULT_BITRATE * 1000;
308 * Init properties (call once).
312 GstMpeg2EncOptions::initProperties (GObjectClass * klass)
314 /* encoding profile */
315 g_object_class_install_property (klass, ARG_FORMAT,
316 g_param_spec_enum ("format", "Format", "Encoding profile format",
317 GST_TYPE_MPEG2ENC_FORMAT, 0,
318 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
320 /* input/output stream overrides */
321 g_object_class_install_property (klass, ARG_FRAMERATE,
322 g_param_spec_enum ("framerate", "Framerate", "Output framerate",
323 GST_TYPE_MPEG2ENC_FRAMERATE, 0,
324 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
325 g_object_class_install_property (klass, ARG_ASPECT,
326 g_param_spec_enum ("aspect", "Aspect", "Display aspect ratio",
327 GST_TYPE_MPEG2ENC_ASPECT, 0,
328 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
329 g_object_class_install_property (klass, ARG_INTERLACE_MODE,
330 g_param_spec_enum ("interlace-mode", "Interlace mode",
331 "MPEG-2 motion estimation and encoding modes",
332 GST_TYPE_MPEG2ENC_INTERLACE_MODE, 0,
333 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
335 /* general encoding stream options */
336 g_object_class_install_property (klass, ARG_BITRATE,
337 g_param_spec_int ("bitrate", "Bitrate", "Compressed video bitrate (kbps)",
338 0, 40 * 1000, DEFAULT_BITRATE,
339 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
340 g_object_class_install_property (klass, ARG_NONVIDEO_BITRATE,
341 g_param_spec_int ("non-video-bitrate", "Non-video bitrate",
342 "Assumed bitrate of non-video for sequence splitting (kbps)",
344 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
345 g_object_class_install_property (klass, ARG_QUANTISATION,
346 g_param_spec_int ("quantisation", "Quantisation",
347 "Quantisation factor (-1=cbr, 0=default, 1=best, 31=worst)",
349 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
352 g_object_class_install_property (klass, ARG_VCD_STILL_SIZE,
353 g_param_spec_int ("vcd-still-size", "VCD stills size",
354 "Size of VCD stills (in KB)",
356 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
358 /* motion estimation options */
359 g_object_class_install_property (klass, ARG_MOTION_SEARCH_RADIUS,
360 g_param_spec_int ("motion-search-radius", "Motion search radius",
361 "Motion compensation search radius",
363 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
364 g_object_class_install_property (klass, ARG_REDUCTION_4_4,
365 g_param_spec_int ("reduction-4x4", "4x4 reduction",
366 "Reduction factor for 4x4 subsampled candidate motion estimates"
367 " (1=max. quality, 4=max. speed)",
369 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
370 g_object_class_install_property (klass, ARG_REDUCTION_2_2,
371 g_param_spec_int ("reduction-2x2", "2x2 reduction",
372 "Reduction factor for 2x2 subsampled candidate motion estimates"
373 " (1=max. quality, 4=max. speed)",
375 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
376 g_object_class_install_property (klass, ARG_UNIT_COEFF_ELIM,
377 g_param_spec_int ("unit-coeff-elim", "Unit coefficience elimination",
378 "How agressively small-unit picture blocks should be skipped",
380 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
383 g_object_class_install_property (klass, ARG_MIN_GOP_SIZE,
384 g_param_spec_int ("min-gop-size", "Min. GOP size",
385 "Minimal size per Group-of-Pictures (-1=default)",
387 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
388 g_object_class_install_property (klass, ARG_MAX_GOP_SIZE,
389 g_param_spec_int ("max-gop-size", "Max. GOP size",
390 "Maximal size per Group-of-Pictures (-1=default)",
392 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
393 g_object_class_install_property (klass, ARG_CLOSED_GOP,
394 g_param_spec_boolean ("closed-gop", "Closed GOP",
395 "All Group-of-Pictures are closed (for multi-angle DVDs)",
397 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
398 g_object_class_install_property (klass, ARG_FORCE_B_B_P,
399 g_param_spec_boolean ("force-b-b-p", "Force B-B-P",
400 "Force two B frames between I/P frames when closing GOP boundaries",
402 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
403 g_object_class_install_property (klass, ARG_B_PER_REFFRAME,
404 g_param_spec_int ("b-per-refframe", "B per ref. frame",
405 "Number of B frames between each I/P frame",
407 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
409 /* quantisation options */
410 g_object_class_install_property (klass, ARG_QUANTISATION_REDUCTION,
411 g_param_spec_float ("quantisation-reduction", "Quantisation reduction",
412 "Max. quantisation reduction for highly active blocks",
414 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
415 g_object_class_install_property (klass, ARG_QUANT_REDUCTION_MAX_VAR,
416 g_param_spec_float ("quant-reduction-max-var",
417 "Max. quant. reduction variance",
418 "Maximal luma variance below which quantisation boost is used",
420 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
421 g_object_class_install_property (klass, ARG_INTRA_DC_PRECISION,
422 g_param_spec_int ("intra-dc-prec", "Intra. DC precision",
423 "Number of bits precision for DC (base colour) in MPEG-2 blocks",
425 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
426 g_object_class_install_property (klass, ARG_REDUCE_HF,
427 g_param_spec_float ("reduce-hf", "Reduce HF",
428 "How much to reduce high-frequency resolution (by increasing quantisation)",
430 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
431 g_object_class_install_property (klass, ARG_KEEP_HF,
432 g_param_spec_boolean ("keep-hf", "Keep HF",
433 "Maximize high-frequency resolution (for high-quality sources)",
435 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
436 g_object_class_install_property (klass, ARG_QUANTISATION_MATRIX,
437 g_param_spec_enum ("quant-matrix", "Quant. matrix",
438 "Quantisation matrix to use for encoding",
439 GST_TYPE_MPEG2ENC_QUANTISATION_MATRIX, 0,
440 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
442 /* general options */
443 g_object_class_install_property (klass, ARG_BUFSIZE,
444 g_param_spec_int ("bufsize", "Decoder buf. size",
445 "Target decoders video buffer size (kB) (default depends on format)",
447 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
449 /* header flag settings */
450 g_object_class_install_property (klass, ARG_VIDEO_NORM,
451 g_param_spec_enum ("norm", "Norm",
452 "Tag output for specific video norm",
453 GST_TYPE_MPEG2ENC_VIDEO_NORM, 0,
454 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
455 g_object_class_install_property (klass, ARG_SEQUENCE_LENGTH,
456 g_param_spec_int ("sequence-length", "Sequence length",
457 "Place a sequence boundary after each <num> MB (0=disable)",
459 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
460 g_object_class_install_property (klass, ARG_3_2_PULLDOWN,
461 g_param_spec_boolean ("pulldown-3-2", "3-2 pull down",
462 "Generate header flags for 3-2 pull down 24fps movies",
464 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
465 g_object_class_install_property (klass, ARG_SEQUENCE_HEADER_EVERY_GOP,
466 g_param_spec_boolean ("sequence-header-every-gop",
467 "Sequence hdr. every GOP",
468 "Include a sequence header in every GOP",
470 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
471 g_object_class_install_property (klass, ARG_DUMMY_SVCD_SOF,
472 g_param_spec_boolean ("dummy-svcd-sof", "Dummy SVCD SOF",
473 "Generate dummy SVCD scan-data (for vcdimager)",
475 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
476 g_object_class_install_property (klass, ARG_PLAYBACK_FIELD_ORDER,
477 g_param_spec_enum ("playback-field-order", "Playback field order",
478 "Force specific playback field order",
479 GST_TYPE_MPEG2ENC_PLAYBACK_FIELD_ORDER, Y4M_UNKNOWN,
480 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
481 g_object_class_install_property (klass, ARG_CORRECT_SVCD_HDS,
482 g_param_spec_boolean ("correct-svcd-hds", "Correct SVCD hor. size",
483 "Force SVCD width to 480 instead of 540/720",
485 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
486 g_object_class_install_property (klass, ARG_ALTSCAN_MPEG2,
487 g_param_spec_boolean ("altscan-mpeg2", "Alt. MPEG-2 scan",
488 "Alternate MPEG-2 block scanning. Disabling this might "
489 "make buggy players play SVCD streams",
491 (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
493 /* dangerous/experimental stuff */
494 g_object_class_install_property (klass, ARG_CONSTRAINTS,
495 g_param_spec_boolean ("constraints", "Constraints",
496 "Use strict video resolution and bitrate checks",
497 TRUE, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
498 #if GST_MJPEGTOOLS_API >= 10800
499 g_object_class_install_property (klass, ARG_DUALPRIME_MPEG2,
500 g_param_spec_boolean ("dualprime", "Dual Prime Motion Estimation",
501 "Dual Prime Motion Estimation Mode for MPEG-2 I/P-frame only "
502 "streams. Quite some players do not support this.",
503 FALSE, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
508 * GObject property foo, C++ style.
512 GstMpeg2EncOptions::getProperty (guint prop_id, GValue * value)
516 g_value_set_enum (value, format);
519 g_value_set_enum (value, frame_rate);
522 g_value_set_enum (value, aspect_ratio);
524 case ARG_INTERLACE_MODE:
525 g_value_set_enum (value, fieldenc);
528 g_value_set_int (value, bitrate / 1000);
530 case ARG_NONVIDEO_BITRATE:
531 g_value_set_int (value, nonvid_bitrate);
533 case ARG_QUANTISATION:
534 g_value_set_int (value, force_cbr ? -1 : quant);
536 case ARG_VCD_STILL_SIZE:
537 g_value_set_int (value, still_size / 1024);
539 case ARG_MOTION_SEARCH_RADIUS:
540 g_value_set_int (value, searchrad);
542 case ARG_REDUCTION_4_4:
543 g_value_set_int (value, me44_red);
545 case ARG_REDUCTION_2_2:
546 g_value_set_int (value, me22_red);
548 case ARG_UNIT_COEFF_ELIM:
549 g_value_set_int (value, unit_coeff_elim);
551 case ARG_MIN_GOP_SIZE:
552 g_value_set_int (value, min_GOP_size);
554 case ARG_MAX_GOP_SIZE:
555 g_value_set_int (value, max_GOP_size);
558 g_value_set_boolean (value, closed_GOPs);
560 case ARG_FORCE_B_B_P:
561 g_value_set_boolean (value, preserve_B);
563 case ARG_B_PER_REFFRAME:
564 g_value_set_int (value, Bgrp_size - 1);
566 case ARG_QUANTISATION_REDUCTION:
567 g_value_set_float (value, act_boost);
569 case ARG_QUANT_REDUCTION_MAX_VAR:
570 g_value_set_float (value, boost_var_ceil);
572 case ARG_INTRA_DC_PRECISION:
573 g_value_set_int (value, mpeg2_dc_prec + 8);
576 g_value_set_float (value, hf_q_boost);
579 g_value_set_boolean (value, hf_quant == 2);
581 case ARG_QUANTISATION_MATRIX:
584 g_value_set_enum (value, GST_MPEG2ENC_QUANTISATION_MATRIX_DEFAULT);
587 g_value_set_enum (value, GST_MPEG2ENC_QUANTISATION_MATRIX_HI_RES);
590 g_value_set_enum (value, GST_MPEG2ENC_QUANTISATION_MATRIX_KVCD);
593 g_value_set_enum (value, GST_MPEG2ENC_QUANTISATION_MATRIX_TMPGENC);
598 g_value_set_int (value, video_buffer_size);
601 g_value_set_enum (value, norm);
603 case ARG_SEQUENCE_LENGTH:
604 g_value_set_int (value, seq_length_limit);
606 case ARG_3_2_PULLDOWN:
607 g_value_set_boolean (value, vid32_pulldown);
609 case ARG_SEQUENCE_HEADER_EVERY_GOP:
610 g_value_set_boolean (value, seq_hdr_every_gop);
612 case ARG_DUMMY_SVCD_SOF:
613 g_value_set_boolean (value, svcd_scan_data);
615 case ARG_PLAYBACK_FIELD_ORDER:
616 g_value_set_enum (value, force_interlacing);
618 case ARG_CORRECT_SVCD_HDS:
619 g_value_set_boolean (value, !hack_svcd_hds_bug);
621 case ARG_ALTSCAN_MPEG2:
622 g_value_set_boolean (value, !hack_altscan_bug);
624 case ARG_CONSTRAINTS:
625 g_value_set_boolean (value, !ignore_constraints);
627 #if GST_MJPEGTOOLS_API >= 10800
628 case ARG_DUALPRIME_MPEG2:
629 g_value_set_boolean (value, hack_dualprime);
638 GstMpeg2EncOptions::setProperty (guint prop_id, const GValue * value)
642 format = g_value_get_enum (value);
645 frame_rate = g_value_get_enum (value);
648 aspect_ratio = g_value_get_enum (value);
650 case ARG_INTERLACE_MODE:
651 fieldenc = g_value_get_enum (value);
654 bitrate = g_value_get_int (value) * 1000;
655 if (bitrate % 400 != 0) {
656 bitrate = (bitrate / 400 + 1) * 400;
657 GST_INFO ("MPEG bitrate must be a multiple of 400"
658 " - rounded up to bitrate %d", bitrate / 1000);
661 case ARG_NONVIDEO_BITRATE:
662 nonvid_bitrate = g_value_get_int (value);
664 case ARG_QUANTISATION:
665 quant = g_value_get_int (value);
671 case ARG_VCD_STILL_SIZE:
672 still_size = g_value_get_int (value) * 1024;
674 case ARG_MOTION_SEARCH_RADIUS:
675 searchrad = g_value_get_int (value);
677 case ARG_REDUCTION_4_4:
678 me44_red = g_value_get_int (value);
680 case ARG_REDUCTION_2_2:
681 me22_red = g_value_get_int (value);
683 case ARG_UNIT_COEFF_ELIM:
684 unit_coeff_elim = g_value_get_int (value);
686 case ARG_MIN_GOP_SIZE:
687 min_GOP_size = g_value_get_int (value);
689 case ARG_MAX_GOP_SIZE:
690 max_GOP_size = g_value_get_int (value);
693 closed_GOPs = g_value_get_boolean (value);
695 case ARG_FORCE_B_B_P:
696 preserve_B = g_value_get_boolean (value);
698 case ARG_B_PER_REFFRAME:
699 Bgrp_size = g_value_get_int (value) + 1;
701 case ARG_QUANTISATION_REDUCTION:
702 act_boost = g_value_get_float (value);
704 case ARG_QUANT_REDUCTION_MAX_VAR:
705 boost_var_ceil = g_value_get_float (value);
707 case ARG_INTRA_DC_PRECISION:
708 mpeg2_dc_prec = g_value_get_int (value) - 8;
711 hf_q_boost = g_value_get_float (value);
712 if (hf_quant == 0 && hf_q_boost != 0.)
716 hf_quant = g_value_get_boolean (value) ? 2 : 0;
718 case ARG_QUANTISATION_MATRIX:
719 switch (g_value_get_enum (value)) {
720 case GST_MPEG2ENC_QUANTISATION_MATRIX_DEFAULT:
724 case GST_MPEG2ENC_QUANTISATION_MATRIX_HI_RES:
727 case GST_MPEG2ENC_QUANTISATION_MATRIX_KVCD:
730 case GST_MPEG2ENC_QUANTISATION_MATRIX_TMPGENC:
736 video_buffer_size = g_value_get_int (value);
739 norm = g_value_get_enum (value);
741 case ARG_SEQUENCE_LENGTH:
742 seq_length_limit = g_value_get_int (value);
744 case ARG_3_2_PULLDOWN:
745 vid32_pulldown = g_value_get_boolean (value);
747 case ARG_SEQUENCE_HEADER_EVERY_GOP:
748 seq_hdr_every_gop = g_value_get_boolean (value);
750 case ARG_DUMMY_SVCD_SOF:
751 svcd_scan_data = g_value_get_boolean (value);
753 case ARG_PLAYBACK_FIELD_ORDER:
754 force_interlacing = g_value_get_enum (value);
756 case ARG_CORRECT_SVCD_HDS:
757 hack_svcd_hds_bug = !g_value_get_boolean (value);
759 case ARG_ALTSCAN_MPEG2:
760 hack_altscan_bug = !g_value_get_boolean (value);
762 case ARG_CONSTRAINTS:
763 ignore_constraints = !g_value_get_boolean (value);
765 #if GST_MJPEGTOOLS_API >= 10800
766 case ARG_DUALPRIME_MPEG2:
767 hack_dualprime = g_value_get_boolean (value);