* Add Video4MotionVector in a stream description to behave like the -4mv flag

* Add ReadOnlyFile which behaves like File, but does not permit changing of the
  file. This can be used to prevent deleting of saved ffm files.

Originally committed as revision 1743 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Philip Gladstone 2003-04-09 02:16:01 +00:00
parent 8553d9f4fd
commit e322ea480b
2 changed files with 38 additions and 1 deletions

View File

@ -46,6 +46,10 @@ NoDaemon
File /tmp/feed1.ffm
FileMaxSize 200K
# You could specify
# ReadOnlyFile /saved/specialvideo.ffm
# This marks the file as readonly and it will not be deleted or updated
# Specify launch in order to start ffmpeg automatically
#Launch
@ -110,6 +114,10 @@ VideoSize 160x128
# frames Video synchronization can only begin at an I frames.
VideoGopSize 12
# More MPEG4 parameters
# VideoHighQuality
# Video4MotionVector
# Choose your codecs:
#AudioCodec mp2
#VideoCodec mpeg1video

View File

@ -208,6 +208,7 @@ typedef struct FFStream {
/* feed specific */
int feed_opened; /* true if someone is writing to the feed */
int is_feed; /* true if it is a feed */
int readonly; /* True if writing is prohibited to the file */
int conns_served;
int64_t bytes_served;
int64_t feed_max_size; /* maximum storage size */
@ -2389,6 +2390,10 @@ static int http_start_receive_data(HTTPContext *c)
if (c->stream->feed_opened)
return -1;
/* Don't permit writing to this one */
if (c->stream->readonly)
return -1;
/* open feed */
fd = open(c->stream->feed_filename, O_RDWR);
if (fd < 0)
@ -3455,12 +3460,24 @@ static void build_feed_streams(void)
printf("Deleting feed file '%s' as it appears to be corrupt\n",
feed->feed_filename);
}
if (!matches)
if (!matches) {
if (feed->readonly) {
printf("Unable to delete feed file '%s' as it is marked readonly\n",
feed->feed_filename);
exit(1);
}
unlink(feed->feed_filename);
}
}
if (!url_exist(feed->feed_filename)) {
AVFormatContext s1, *s = &s1;
if (feed->readonly) {
printf("Unable to create feed file '%s' as it is marked readonly\n",
feed->feed_filename);
exit(1);
}
/* only write the header of the ffm file */
if (url_fopen(&s->pb, feed->feed_filename, URL_WRONLY) < 0) {
fprintf(stderr, "Could not open output feed file '%s'\n",
@ -3815,6 +3832,13 @@ static int parse_ffconfig(const char *filename)
snprintf(feed->child_argv[i], 256, "http://127.0.0.1:%d/%s",
ntohs(my_http_addr.sin_port), feed->filename);
}
} else if (!strcasecmp(cmd, "ReadOnlyFile")) {
if (feed) {
get_arg(feed->feed_filename, sizeof(feed->feed_filename), &p);
feed->readonly = 1;
} else if (stream) {
get_arg(stream->feed_filename, sizeof(stream->feed_filename), &p);
}
} else if (!strcasecmp(cmd, "File")) {
if (feed) {
get_arg(feed->feed_filename, sizeof(feed->feed_filename), &p);
@ -4053,6 +4077,11 @@ static int parse_ffconfig(const char *filename)
if (stream) {
video_enc.flags |= CODEC_FLAG_HQ;
}
} else if (!strcasecmp(cmd, "Video4MotionVector")) {
if (stream) {
video_enc.flags |= CODEC_FLAG_HQ;
video_enc.flags |= CODEC_FLAG_4MV;
}
} else if (!strcasecmp(cmd, "VideoQDiff")) {
get_arg(arg, sizeof(arg), &p);
if (stream) {