685
695
outbuf = gst_buffer_new_and_alloc (encoded_buffer->length);
686
696
memcpy (GST_BUFFER_DATA (outbuf), encoded_buffer->data,
687
697
encoded_buffer->length);
688
gst_buffer_set_caps (outbuf, gst_pad_get_caps(schro_enc->srcpad));
690
GST_BUFFER_OFFSET_END (outbuf) =
691
(schro_enc->granulepos_hi<<30) + schro_enc->granulepos_low;
692
GST_BUFFER_OFFSET (outbuf) = gst_util_uint64_scale (
693
(schro_enc->granulepos_hi + schro_enc->granulepos_low),
694
schro_enc->fps_d * GST_SECOND, schro_enc->fps_n);
696
GST_BUFFER_TIMESTAMP (outbuf) = gst_util_uint64_scale (
697
(schro_enc->granulepos_hi + schro_enc->granulepos_low),
698
schro_enc->fps_d * GST_SECOND, schro_enc->fps_n);
698
gst_buffer_set_caps (outbuf,
699
gst_caps_new_simple ("video/x-dirac",
700
"width", G_TYPE_INT, schro_enc->width,
701
"height", G_TYPE_INT, schro_enc->height,
702
"framerate", GST_TYPE_FRACTION, schro_enc->fps_n,
700
706
if (SCHRO_PARSE_CODE_IS_PICTURE(parse_code)) {
707
GST_BUFFER_OFFSET_END (outbuf) =
708
(schro_enc->granulepos_hi<<OGG_DIRAC_GRANULE_SHIFT) +
709
schro_enc->granulepos_low;
710
GST_BUFFER_OFFSET (outbuf) = gst_util_uint64_scale (
711
(schro_enc->granulepos_hi + schro_enc->granulepos_low),
712
schro_enc->fps_d * GST_SECOND, schro_enc->fps_n);
701
713
GST_BUFFER_DURATION (outbuf) = schro_enc->duration;
714
GST_BUFFER_TIMESTAMP (outbuf) =
715
schro_enc->timestamp_offset + gst_util_uint64_scale (
716
schro_enc->picture_number,
717
schro_enc->fps_d * GST_SECOND, schro_enc->fps_n);
718
schro_enc->picture_number++;
719
if (!SCHRO_PARSE_CODE_IS_INTRA(parse_code)) {
720
GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DELTA_UNIT);
703
GST_BUFFER_DURATION (outbuf) = 0;
723
GST_BUFFER_OFFSET_END (outbuf) = 0;
724
GST_BUFFER_OFFSET (outbuf) = 0;
725
GST_BUFFER_DURATION (outbuf) = -1;
726
//GST_BUFFER_TIMESTAMP (outbuf) = -1;
727
GST_BUFFER_TIMESTAMP (outbuf) =
728
schro_enc->timestamp_offset + gst_util_uint64_scale (
729
schro_enc->picture_number,
730
schro_enc->fps_d * GST_SECOND, schro_enc->fps_n);
706
733
GST_INFO("size %d offset %lld granulepos %llu:%llu timestamp %lld duration %lld",
707
734
GST_BUFFER_SIZE (outbuf),
708
735
GST_BUFFER_OFFSET (outbuf),
709
GST_BUFFER_OFFSET_END (outbuf)>>30,
710
GST_BUFFER_OFFSET_END (outbuf)&((1<<30) - 1),
736
GST_BUFFER_OFFSET_END (outbuf)>>OGG_DIRAC_GRANULE_SHIFT,
737
GST_BUFFER_OFFSET_END (outbuf)&OGG_DIRAC_GRANULE_LOW_MASK,
711
738
GST_BUFFER_TIMESTAMP (outbuf),
712
739
GST_BUFFER_DURATION (outbuf));
714
if (SCHRO_PARSE_CODE_IS_INTRA(parse_code)) {
715
GST_BUFFER_FLAG_UNSET (outbuf, GST_BUFFER_FLAG_DELTA_UNIT);
718
741
schro_buffer_unref (encoded_buffer);
720
743
ret = gst_pad_push (schro_enc->srcpad, outbuf);