public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede@redhat.com>
To: Mauro Carvalho Chehab <mchehab@redhat.com>
Cc: linux-media@vger.kernel.org
Subject: Re: [git:xawtv3/master] xawtv: reenable its usage with webcam's
Date: Wed, 29 Jun 2011 14:24:59 +0200	[thread overview]
Message-ID: <4E0B199B.4010008@redhat.com> (raw)
In-Reply-To: <4E0B1407.8000907@redhat.com>

Hi,

On 06/29/2011 02:01 PM, Mauro Carvalho Chehab wrote:
> Em 29-06-2011 08:01, Hans de Goede escreveu:
>> Hi,
>>
>> On 06/28/2011 07:32 PM, Mauro Carvalho Chehab wrote:
>>> This is an automatic generated email to let you know that the following patch were queued at the
>>> http://git.linuxtv.org/xawtv3.git tree:
>>>
>>> Subject: xawtv: reenable its usage with webcam's
>>> Author:  Mauro Carvalho Chehab<mchehab@redhat.com>
>>> Date:    Tue Jun 28 14:22:55 2011 -0300
>>>
>>> git changeset c28978f3693bc0f40607d0b3e589774b9452608d was requiring that
>>> tuner would be available, in order to allow it to run. Relax the restriction,
>>> in order to allow using xawtv to test webcams, restoring the previous
>>> behavior.
>>>
>>> Signed-off-by: Mauro Carvalho Chehab<mchehab@redhat.com>
>>>
>>>    libng/grab-ng.c |    4 ++--
>>>    1 files changed, 2 insertions(+), 2 deletions(-)
>>>
>>> ---
>>>
>>> http://git.linuxtv.org/xawtv3.git?a=commitdiff;h=2238f79d9fb2801a3acd114242b437686fa2f0c8
>>>
>>> diff --git a/libng/grab-ng.c b/libng/grab-ng.c
>>> index f5203cc..94f31e8 100644
>>> --- a/libng/grab-ng.c
>>> +++ b/libng/grab-ng.c
>>> @@ -563,9 +563,9 @@ static void *ng_vid_open_auto(struct ng_vid_driver *drv, char *devpath)
>>>            continue;
>>>        }
>>>
>>> -    /* Check caps return this device if it can capture and has a tuner */
>>> +    /* Check caps return this device if it can capture */
>>>        caps = drv->capabilities(handle);
>>> -    if ((caps&   CAN_CAPTURE)&&   (caps&   CAN_TUNE))
>>> +    if (caps&   CAN_CAPTURE)
>>>            break;
>>>
>>>        drv->close(handle);
>>>
>>
>> Hmm, this changes the behavior from what I intended, the idea was to select the
>> first *tv-card*, without checking for a tuner, there is little value in the auto
>> device feature. Granted it will still skip v4l2 output only devices but those are
>> very rare.
>
> Your patch broke support for vivi and for video grabber devices. Those devices don't
> have a tuner.
>

I did no such thing as "break support". The new xawtv will still work fine with
them with an explicit "-c /dev/video#" argument.

>> Note that only the xawtv binary is using a device value of "auto" by default,
>> the webcam tool still defaults to /dev/video0
>
> It is not "by default", as there's was way to override the CAN_TUNE check logic.
> calling xawtv without my changes with vivi or a webcam would simply return as if
> there's no supported V4L device.
>

One can override the CAN_TUNE logic quite simply, revert your patch and do:
xawtv -c /dev/video#

On a device without a tuner, and it will work fine, if you don't specify the
device and don't have a device with a tuner you will get the following error:
vid-open: could not find a suitable videodev

Which sounds like a sane error for a tv viewing app when it cannot find
a tv-card. Granted, maybe the error should be changed to:
vid-open: could not find a suitable tv-card

To make things even more clear.

This is only the default behavior, and in *no way* have I *broken* use
with a webcam, simply doing:
xawtv -c /dev/video#

Will work fine with any device which worked before as can been clearly
seen from the new code:

+#ifdef __linux__
+    if (!strcmp(*device, "auto")) {
+        char devpath[PATH_MAX];
+	*handle = ng_vid_open_auto(drv, devpath);
+	if (*handle == NULL) {
+	    fprintf(stderr, "vid-open: could not find a suitable videodev\n");
+	    return NULL;
+	}
+	*device = strdup(devpath);
+    } else
+#endif
+    {
+	if (ng_debug)
+	    fprintf(stderr,"vid-open: trying: %s... \n", drv->name);
+	if (!(*handle = (drv->open)(*device))) {
+	    fprintf(stderr,"vid-open: failed: %s\n", drv->name);
+	    return NULL;
+	}
+	if (ng_debug)
+	    fprintf(stderr,"vid-open: ok: %s\n", drv->name);
      }


Specify anything other then auto and the code you've changed simply does
not get called.

>> Given that xawtv is specifically meant for tv-cards (unlike the webcam tool)
>> failing if it cannot find a tv-card and no device is explicitly specified seems
>> reasonable.
>
> Well, xawtv ever worked also with webcams, and with the libv4l, it is now
> working even better. I don't see any reason why removing such support for it.
>

Again I did not remove support for that, you should have studied my patch /
the problem a bit better before making such claims.

> Btw, with the changes I've made, the TV-specific controls are now removed if
> the device is a grabber or a webcam.

Nice!

> There's currently just one detail to be
> fixed: the window title will be changed to "???" on those devices. This is an
> old bug, as changing from Television to S-Video or Composite, on a device that
> has both tuner and grabber capabilities, it will still keep the channel name
> there. It probably makes sense to print there the input name instead, if the
> input is not Television.

Agreed.

>> Alternatively we could make the desired caps a param too ng_vid_open_auto
>> and first try with (CAN_CAPTURE | CAN_TUNE) and then retry with only
>> CAN_CAPTURE.
>
> A logic like that would be better, although, IMO, we should print a message
> saying that we're not using video0. Also, if we're willing to do such logic,
> it makes sense to implement the auto mode also for "scantv".
>

Why should we print a message that we're not using video0? In the modern
dynamic device discovery world, the # in /dev/video# is as good as meaningless.

>> The above patch definitely is not what I had in mind. My system has a
>> bt878 tv card, and a varying number of webcams connected, thus constantly
>> changing the /dev/video# for the tv-card. The intent of my "auto" device
>> patches was to make xawtv automatically pick the tvcard.
>
> Well, a varying device for /dev/video is something that we need to fix at udev.
> There are some ways to create persistent rules for that.
>
> In a matter of fact, IMO, we should change the V4L2 device nodes reported via
> udev, to be more intuitive, e. g. instead of creating /dev/video for everything,
> create /dev/webcam? /dev/grabber? /dev/analog_tv? device nodes, while creating
> a symlink to /dev/video, in order to not break existing applications that have
> it hardcoded.

That sounds like a good idea, but first needs to be written and then make its
way into distributions, I wanted something which would improve the user experience
right now, rather then in 2 years.

>> I intented to mail you about my get_media_devices fixes as well as my
>> auto device patches, and suggest that we do a new release soon.
>
> Yes, I think we should make a release for it soon. There are enough features
> added on xawtv that justifies doing a new release.
>

Agreed,

Regards,

Hans

  reply	other threads:[~2011-06-29 12:23 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <E1Qbdw6-0007wL-E8@www.linuxtv.org>
2011-06-29 11:01 ` [git:xawtv3/master] xawtv: reenable its usage with webcam's Hans de Goede
2011-06-29 12:01   ` Mauro Carvalho Chehab
2011-06-29 12:24     ` Hans de Goede [this message]
2011-06-29 19:27       ` Mauro Carvalho Chehab
2011-06-30 10:55         ` Hans de Goede
2011-06-30 12:35           ` Mauro Carvalho Chehab
2011-06-30 13:20             ` Mauro Carvalho Chehab
2011-06-30 13:24               ` Mauro Carvalho Chehab

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4E0B199B.4010008@redhat.com \
    --to=hdegoede@redhat.com \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox