Home | History | Annotate | Download | only in media
      1 /*
      2  * Copyright (C) 2014 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 
     18 /*
     19  * This file defines an NDK API.
     20  * Do not remove methods.
     21  * Do not change method signatures.
     22  * Do not change the value of constants.
     23  * Do not change the size of any of the classes defined in here.
     24  * Do not reference types that are not part of the NDK.
     25  * Do not #include files that aren't part of the NDK.
     26  */
     27 
     28 #ifndef _NDK_MEDIA_MUXER_H
     29 #define _NDK_MEDIA_MUXER_H
     30 
     31 #include <sys/cdefs.h>
     32 #include <sys/types.h>
     33 
     34 #include "NdkMediaCodec.h"
     35 #include "NdkMediaError.h"
     36 #include "NdkMediaFormat.h"
     37 
     38 __BEGIN_DECLS
     39 
     40 struct AMediaMuxer;
     41 typedef struct AMediaMuxer AMediaMuxer;
     42 
     43 typedef enum {
     44     AMEDIAMUXER_OUTPUT_FORMAT_MPEG_4 = 0,
     45     AMEDIAMUXER_OUTPUT_FORMAT_WEBM   = 1,
     46 } OutputFormat;
     47 
     48 #if __ANDROID_API__ >= 21
     49 
     50 /**
     51  * Create new media muxer
     52  */
     53 AMediaMuxer* AMediaMuxer_new(int fd, OutputFormat format);
     54 
     55 /**
     56  * Delete a previously created media muxer
     57  */
     58 media_status_t AMediaMuxer_delete(AMediaMuxer*);
     59 
     60 /**
     61  * Set and store the geodata (latitude and longitude) in the output file.
     62  * This method should be called before AMediaMuxer_start. The geodata is stored
     63  * in udta box if the output format is AMEDIAMUXER_OUTPUT_FORMAT_MPEG_4, and is
     64  * ignored for other output formats.
     65  * The geodata is stored according to ISO-6709 standard.
     66  *
     67  * Both values are specified in degrees.
     68  * Latitude must be in the range [-90, 90].
     69  * Longitude must be in the range [-180, 180].
     70  */
     71 media_status_t AMediaMuxer_setLocation(AMediaMuxer*, float latitude, float longitude);
     72 
     73 /**
     74  * Sets the orientation hint for output video playback.
     75  * This method should be called before AMediaMuxer_start. Calling this
     76  * method will not rotate the video frame when muxer is generating the file,
     77  * but add a composition matrix containing the rotation angle in the output
     78  * video if the output format is AMEDIAMUXER_OUTPUT_FORMAT_MPEG_4, so that a
     79  * video player can choose the proper orientation for playback.
     80  * Note that some video players may choose to ignore the composition matrix
     81  * during playback.
     82  * The angle is specified in degrees, clockwise.
     83  * The supported angles are 0, 90, 180, and 270 degrees.
     84  */
     85 media_status_t AMediaMuxer_setOrientationHint(AMediaMuxer*, int degrees);
     86 
     87 /**
     88  * Adds a track with the specified format.
     89  * Returns the index of the new track or a negative value in case of failure,
     90  * which can be interpreted as a media_status_t.
     91  */
     92 ssize_t AMediaMuxer_addTrack(AMediaMuxer*, const AMediaFormat* format);
     93 
     94 /**
     95  * Start the muxer. Should be called after AMediaMuxer_addTrack and
     96  * before AMediaMuxer_writeSampleData.
     97  */
     98 media_status_t AMediaMuxer_start(AMediaMuxer*);
     99 
    100 /**
    101  * Stops the muxer.
    102  * Once the muxer stops, it can not be restarted.
    103  */
    104 media_status_t AMediaMuxer_stop(AMediaMuxer*);
    105 
    106 /**
    107  * Writes an encoded sample into the muxer.
    108  * The application needs to make sure that the samples are written into
    109  * the right tracks. Also, it needs to make sure the samples for each track
    110  * are written in chronological order (e.g. in the order they are provided
    111  * by the encoder.)
    112  */
    113 media_status_t AMediaMuxer_writeSampleData(AMediaMuxer *muxer,
    114         size_t trackIdx, const uint8_t *data, const AMediaCodecBufferInfo *info);
    115 
    116 #endif /* __ANDROID_API__ >= 21 */
    117 
    118 __END_DECLS
    119 
    120 #endif // _NDK_MEDIA_MUXER_H
    121