Date: Sun, 05 Oct 1997 14:53:40 -0700 From: Amancio Hasty <hasty@rah.star-gate.com> To: multimedia@FreeBSD.ORG Cc: Randall Hopper <rhh@ct.picker.com> Subject: [video] frame rate and fxtv Message-ID: <199710052153.OAA00586@rah.star-gate.com>
next in thread | raw e-mail | index | archive | help
So far I have received the following information from brooktree and I
can't seem to get the set frame rate functionality to work properly
on single frames and with odd/even frames.
For now, I suggest that fxtv emulates the frame rate functionality by
specifying the full frame rate and skipping frames based upon the
desired frame rate for video capture.
Amancio
from brooktree:
> We received your inquiry about the Bt848 PCI-based decoder recently.
> For your reference, it is repeated below:
> >> A little while ago I wrote a Bt848 driver from scratch for FreeBSD
> a public domain unix system. The driver is very popular to be watching
> TV in a multi tasking operating system and the driver has been ported
> to BSDI and Linux.
> More to the point here, my last remaining problem has to deal with
> setting the frame rate:
> This is a comment from one of the developers:
> " The problem: despite the databook's description of how temporal
> decimation on frames is supposed to work (whole frames are masked as a
> unit for purposes of synchronization), it appears that the engine is
> masking out fields, or rotating the enablement of the fields based on
> the requested number of dropped frames. Anyway, I must be missing
> something. Could sure use a set of eyes with more bt experience."
> Also, I have a simple question , what is the behavior of the video
> engine when it decides to drop a frame? does it report uniquely that
> it has drop a frame as supposed to reporting that it has dropped a
> frame due to a pci error?
> This is the current code in the driver to set the frame rates:
> static void set_fps( bktr_ptr_t bktr, u_short fps ) {
> bt848_ptr_t bt848;
> struct format_params *fp;
> int i_flag;
> fp = &format_params[bktr->format_params];
> bt848 = bktr->base;
> switch(bktr->flags & METEOR_ONLY_FIELDS_MASK) {
> case METEOR_ONLY_EVEN_FIELDS:
> bktr->flags |= METEOR_WANT_EVEN;
> i_flag = 1;
> break;
> case METEOR_ONLY_ODD_FIELDS:
> bktr->flags |= METEOR_WANT_ODD;
> i_flag = 1;
> break;
> default:
> bktr->flags |= METEOR_WANT_MASK;
> i_flag = 2;
> break;
> }
> bt848->gpio_dma_ctl = FIFO_RISC_DISABLED;
> bt848->int_stat = ALL_INTS_CLEARED;
> bktr->fps = fps;
> bt848->tdec = 0;
> if (fps < fp->frame_rate)
> bt848->tdec = i_flag*(fp->frame_rate - fps) &
> 0x3f;
> else
> bt848->tdec = 0;
> return;
> }
> >>
> It seems as if you understanding of the Bt848's Temporal Decimation
> process
> is correct. FYI, this topic is discussed on pages 41, 42, 78-83, and
> 103 of the Bt848A datasheet.
> (See attached file: L848A_A.pdf)
> The Bt848 provides temporal decimation in either a field or a frame
> basis depending on what value is loaded into the TDEC register. This
> register is allowed to have a value from 1 to 60 for NTSC and 1 to 50
> for PAL and is located in the Local Register section, Memory Mapped
> location 0x08.
> The value inserted into this register is the number of fields or
> frames skipped by the Bt848 during a sequnce of 60 fields for NTSC or
> 50 fields for PAL. Skipped fields and frames will be considered
> inactive and this inactivity will de indicated by the ACTIVE pin(# 88
> - GPI/O 17) when the Bt848 is in the Digital Video-In Mode or the
> VACTIVE and HACTIVE pins(GPI/O 17 and GPI/O 21 respectively) when the
> Bt848 is in the SPI input and output modes.
> While the Bt848 is in normal operation, these pins will indicate
> whether a frame has been dropped by the TDEC register setting because
> each signal will stay low, indicatinmg that no active video
> information is bing bursted onto the PCI bus.
> I will have to check on the behavior of the Bt848 when it drops a
> frame or two unintentionally because of a PCI error. I will send you
> this answer when I find out myself.
> Please visit our ftp site. New documentation is available at: ftp://
> bt848:pcivideo@ftp.brooktree.com/bt848/
part 2 from brooktree:
> Amancio,
> Now that your up to speed on thein and outs of the Bt848's Temporal
> Decimation process, I want to address the PCI Error issue.
> I checked on the behavior of the Bt848 when it drops a frame or two
> unintentionally because of a PCI error or delay. This condition will
> be reported though a number of different registers and pins. The
> Command and Status Register(PCI Configuration Header register location
> 0x04) on page 97 of the Bt848A_A spec. explains that when a master
> transaction is terminated with a Master Abort or Target Abort,
> bit[29] and bit[28] respectively of this register will be set.
> Furthermore, the SERR/System Error output pin(#50)from the Bt848A will
> report an address parity error to external devices in the case of an
> address parity error.
> Also, if there is a long delay in Input Video, the PRES bit of the
> DSTATUS register will denote this condition.
> Finally, the INT_STAT register(Local Register Mapped Location 0x100)
> has several interrupt status bits which will denote different
> PCI-related and FIFO-related errors. Specifically, examine
> RISC_EN[bit 27], SCERR[bit 19], OCERR[bit 18], and bits 17-12.
> This closes my responses to you regarding this inquiry. If you have
> future questions regarding the Bt848 or other encoders or decoders we
> design and manufacture, please send your questions to
> did-apps@rss.rockwell.com. Thank you for your design efforts with the
> Bt848.
> I am stilll researching an answer for you on how to enable reading
> ACTIVE pin #88 in Digital Video In Mode. I caution you that if you
> choose to use this mode to take advantage of the Complementary ACTIVE
> output, then all 24 GPIO pins will be in this mode and assume their
> complementary pin assignments. You cannot have some be in NORMAL mode
> and other in an alternate mode.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199710052153.OAA00586>
