Convert to avio API.
Disable mpeg1 append code based or the ffurl API as mpeg1 is blacklisted with
new ffmpeg versions in this code anyway.
Fix build with ffmpeg-1

Index: motion-3.2.12/ffmpeg.c
===================================================================
--- motion-3.2.12.orig/ffmpeg.c
+++ motion-3.2.12/ffmpeg.c
@@ -73,6 +73,7 @@ AVFrame *ffmpeg_prepare_frame(struct ffm
 /* This is the trailer used to end mpeg1 videos. */
 static unsigned char mpeg1_trailer[] = {0x00, 0x00, 0x01, 0xb7};
 
+#ifndef FFMPEG_NO_NONSTD_MPEG1
 /* Append version of the file open function used in libavformat when opening
  * an ordinary file. The original file open function truncates an existing
  * file, but this version appends to it instead.
@@ -118,6 +119,7 @@ URLProtocol mpeg1_file_protocol = {
     .url_open = file_open_append
 };
 
+#endif
 
 #ifdef HAVE_FFMPEG_NEW
 
@@ -132,6 +134,7 @@ URLProtocol mpeg1_file_protocol = {
 #include "avstring.h"
 #endif
 
+#ifndef FFMPEG_NO_NONSTD_MPEG1
 static int file_open(URLContext *h, const char *filename, int flags)
 {
     int access_flags, fd;
@@ -195,6 +198,7 @@ URLProtocol file_protocol = {
 };
 
 #endif
+#endif
 
 
 /* We set AVOutputFormat->write_trailer to this function for mpeg1. That way,
@@ -203,8 +207,8 @@ URLProtocol file_protocol = {
 static int mpeg1_write_trailer(AVFormatContext *s)
 {
 #if LIBAVFORMAT_BUILD >= (52<<16) 
-    put_buffer(s->pb, mpeg1_trailer, 4);
-    put_flush_packet(s->pb);    
+    avio_write(s->pb, mpeg1_trailer, 4);
+    avio_flush(s->pb);    
 #else
     put_buffer(&s->pb, mpeg1_trailer, 4);
     put_flush_packet(&s->pb);
@@ -226,6 +230,7 @@ void ffmpeg_init()
     /* Copy the functions to use for the append file protocol from the standard
      * file protocol.
      */
+#ifndef FFMPEG_NO_NONSTD_MPEG1
     mpeg1_file_protocol.url_read  = file_protocol.url_read;
     mpeg1_file_protocol.url_write = file_protocol.url_write;
     mpeg1_file_protocol.url_seek  = file_protocol.url_seek;
@@ -239,6 +244,7 @@ void ffmpeg_init()
 #else
     register_protocol(&mpeg1_file_protocol);
 #endif
+#endif
 }
 
 /* Obtains the output format used for the specified codec. For mpeg4 codecs,
@@ -422,13 +428,6 @@ struct ffmpeg *ffmpeg_open(char *ffmpeg_
         c->flags |= CODEC_FLAG_GLOBAL_HEADER;
     }
 
-    /* set the output parameters (must be done even if no parameters). */
-    if (av_set_parameters(ffmpeg->oc, NULL) < 0) {
-        motion_log(LOG_ERR, 0, "ffmpeg av_set_parameters error: Invalid output format parameters");
-        ffmpeg_cleanups(ffmpeg);
-        return NULL;
-    }
-
     /* Dump the format settings.  This shows how the various streams relate to each other */
     //dump_format(ffmpeg->oc, 0, filename, 1);
 
@@ -504,7 +503,7 @@ struct ffmpeg *ffmpeg_open(char *ffmpeg_
             snprintf(file_proto, sizeof(file_proto), "%s", filename);
         
 
-        if (url_fopen(&ffmpeg->oc->pb, file_proto, URL_WRONLY) < 0) {
+        if (avio_open(&ffmpeg->oc->pb, file_proto, AVIO_FLAG_WRITE) < 0) {
             /* path did not exist? */
             if (errno == ENOENT) {
                 /* create path for file (don't use file_proto)... */
@@ -514,7 +513,7 @@ struct ffmpeg *ffmpeg_open(char *ffmpeg_
                 }
 
                 /* and retry opening the file (use file_proto) */
-                if (url_fopen(&ffmpeg->oc->pb, file_proto, URL_WRONLY) < 0) {
+                if (avio_open(&ffmpeg->oc->pb, file_proto, AVIO_FLAG_WRITE) < 0) {
                     motion_log(LOG_ERR, 1, "url_fopen - error opening file %s",filename);
                     ffmpeg_cleanups(ffmpeg);
                     return NULL;
@@ -535,7 +534,11 @@ struct ffmpeg *ffmpeg_open(char *ffmpeg_
     }
 
     /* write the stream header, if any */
-    av_write_header(ffmpeg->oc);
+    if(avformat_write_header(ffmpeg->oc, NULL) < 0) {
+      motion_log(LOG_ERR, 1, "Error while writing header for %s", filename);
+      ffmpeg_cleanups(ffmpeg);
+      return NULL;
+    }
     
     return ffmpeg;
 }
@@ -602,7 +605,7 @@ void ffmpeg_close(struct ffmpeg *ffmpeg)
     if (!(ffmpeg->oc->oformat->flags & AVFMT_NOFILE)) {
         /* close the output file */
 #if LIBAVFORMAT_BUILD >= (52<<16) 
-        url_fclose(ffmpeg->oc->pb);
+        avio_close(ffmpeg->oc->pb);
 #else
         url_fclose(&ffmpeg->oc->pb);
 #endif /* LIBAVFORMAT_BUILD >= (52<<16) */
