mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
The SVDRP command GRAB now optionally writes the image data to the SVDRP connection (encoded in base64)
This commit is contained in:
parent
61fefd00bf
commit
12b4f37ca3
@ -1369,6 +1369,7 @@ Darren Salt <linux@youmustbejoking.demon.co.uk>
|
|||||||
for a patch that was used to add the command line options '--lirc', '--rcu' and
|
for a patch that was used to add the command line options '--lirc', '--rcu' and
|
||||||
'--no-kbd'
|
'--no-kbd'
|
||||||
for adding '__attribute__' to functions that use printf() like parameters
|
for adding '__attribute__' to functions that use printf() like parameters
|
||||||
|
for suggesting to write grabbed images to the SVDRP connection encoded in base64
|
||||||
|
|
||||||
Sean Carlos <seanc@libero.it>
|
Sean Carlos <seanc@libero.it>
|
||||||
for translating OSD texts to the Italian language
|
for translating OSD texts to the Italian language
|
||||||
|
4
HISTORY
4
HISTORY
@ -4019,3 +4019,7 @@ Video Disk Recorder Revision History
|
|||||||
need to be adapted to the new interface.
|
need to be adapted to the new interface.
|
||||||
- The new class cBase64Encoder (see tools.h) can be used to encode data in
|
- The new class cBase64Encoder (see tools.h) can be used to encode data in
|
||||||
base64 (thanks to Bob Withers for publishing his Base64 class).
|
base64 (thanks to Bob Withers for publishing his Base64 class).
|
||||||
|
- The SVDRP command GRAB now writes the image data to the SVDRP connection
|
||||||
|
(encoded in base64) if the given file name consists of only the file
|
||||||
|
extension (".jpg", ".jpeg" or ".pnm"), or if only "-" is given as file
|
||||||
|
name (based on a suggestion from Darren Salt).
|
||||||
|
45
svdrp.c
45
svdrp.c
@ -10,7 +10,7 @@
|
|||||||
* and interact with the Video Disk Recorder - or write a full featured
|
* and interact with the Video Disk Recorder - or write a full featured
|
||||||
* graphical interface that sits on top of an SVDRP connection.
|
* graphical interface that sits on top of an SVDRP connection.
|
||||||
*
|
*
|
||||||
* $Id: svdrp.c 1.86 2005/12/29 13:33:43 kls Exp $
|
* $Id: svdrp.c 1.87 2005/12/30 10:27:23 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "svdrp.h"
|
#include "svdrp.h"
|
||||||
@ -204,9 +204,13 @@ const char *HelpPages[] = {
|
|||||||
"GRAB <filename> [ <quality> [ <sizex> <sizey> ] ]\n"
|
"GRAB <filename> [ <quality> [ <sizex> <sizey> ] ]\n"
|
||||||
" Grab the current frame and save it to the given file. Images can\n"
|
" Grab the current frame and save it to the given file. Images can\n"
|
||||||
" be stored as JPEG or PNM, depending on the given file name extension.\n"
|
" be stored as JPEG or PNM, depending on the given file name extension.\n"
|
||||||
" The quality of the grabbed image (only applies to JPEG) can be in the\n"
|
" The quality of the grabbed image can be in the range 0..100, where 100\n"
|
||||||
" range 0..100, where 100 means \"best\". The size parameters define the\n"
|
" (the default) means \"best\" (only applies to JPEG). The size parameters\n"
|
||||||
" size of the resulting image (default is full screen).",
|
" define the size of the resulting image (default is full screen).\n"
|
||||||
|
" If the file name is just an extension (.jpg, .jpeg or .pnm) the image\n"
|
||||||
|
" data will be sent to the SVDRP connection encoded in base64. The same\n"
|
||||||
|
" happens if '-' (a minus sign) is given as file name, in which case the\n"
|
||||||
|
" image format defaults to JPEG.",
|
||||||
"HELP [ <topic> ]\n"
|
"HELP [ <topic> ]\n"
|
||||||
" The HELP command gives help info.",
|
" The HELP command gives help info.",
|
||||||
"HITK [ <key> ]\n"
|
"HITK [ <key> ]\n"
|
||||||
@ -309,6 +313,7 @@ const char *HelpPages[] = {
|
|||||||
|
|
||||||
214 Help message
|
214 Help message
|
||||||
215 EPG or recording data record
|
215 EPG or recording data record
|
||||||
|
216 Image grab data (base 64)
|
||||||
220 VDR service ready
|
220 VDR service ready
|
||||||
221 VDR service closing transmission channel
|
221 VDR service closing transmission channel
|
||||||
250 Requested VDR action okay, completed
|
250 Requested VDR action okay, completed
|
||||||
@ -668,7 +673,11 @@ void cSVDRP::CmdGRAB(const char *Option)
|
|||||||
Reply(501, "Unknown image type \"%s\"", Extension + 1);
|
Reply(501, "Unknown image type \"%s\"", Extension + 1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (Extension == FileName)
|
||||||
|
FileName = NULL;
|
||||||
}
|
}
|
||||||
|
else if (strcmp(FileName, "-") == 0)
|
||||||
|
FileName = NULL;
|
||||||
else {
|
else {
|
||||||
Reply(501, "Missing filename extension in \"%s\"", FileName);
|
Reply(501, "Missing filename extension in \"%s\"", FileName);
|
||||||
return;
|
return;
|
||||||
@ -711,8 +720,34 @@ void cSVDRP::CmdGRAB(const char *Option)
|
|||||||
Reply(501, "Unexpected parameter \"%s\"", p);
|
Reply(501, "Unexpected parameter \"%s\"", p);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (cDevice::PrimaryDevice()->GrabImageFile(FileName, Jpeg, Quality, SizeX, SizeY))
|
int ImageSize;
|
||||||
|
uchar *Image = cDevice::PrimaryDevice()->GrabImage(ImageSize, Jpeg, Quality, SizeX, SizeY);
|
||||||
|
if (Image) {
|
||||||
|
if (FileName) {
|
||||||
|
FILE *f = fopen(FileName, "wb");
|
||||||
|
if (f) {
|
||||||
|
if (fwrite(Image, ImageSize, 1, f) == 1)
|
||||||
Reply(250, "Grabbed image %s", Option);
|
Reply(250, "Grabbed image %s", Option);
|
||||||
|
else {
|
||||||
|
LOG_ERROR_STR(FileName);
|
||||||
|
Reply(451, "Can't write to '%s'", FileName);
|
||||||
|
}
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
LOG_ERROR_STR(FileName);
|
||||||
|
Reply(451, "Can't open '%s'", FileName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
cBase64Encoder Base64(Image, ImageSize);
|
||||||
|
const char *s;
|
||||||
|
while ((s = Base64.NextLine()) != NULL)
|
||||||
|
Reply(-216, s);
|
||||||
|
Reply(216, "Grabbed image %s", Option);
|
||||||
|
}
|
||||||
|
free(Image);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
Reply(451, "Grab image failed");
|
Reply(451, "Grab image failed");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user