Loading include/media/mediarecorder.h +3 −0 Original line number Diff line number Diff line Loading @@ -76,6 +76,9 @@ enum output_format { /* Stream over a socket, limited to a single stream */ OUTPUT_FORMAT_RTP_AVP = 7, /* H.264/AAC data encapsulated in MPEG2/TS */ OUTPUT_FORMAT_MPEG2TS = 8, OUTPUT_FORMAT_LIST_END // must be last - used to validate format type }; Loading include/media/stagefright/MPEG2TSWriter.h +5 −0 Original line number Diff line number Diff line Loading @@ -25,7 +25,10 @@ namespace android { struct ABuffer; struct MPEG2TSWriter : public MediaWriter { MPEG2TSWriter(int fd); MPEG2TSWriter(const char *filename); virtual status_t addSource(const sp<MediaSource> &source); Loading Loading @@ -59,6 +62,8 @@ private: int64_t mNumTSPacketsWritten; int64_t mNumTSPacketsBeforeMeta; void init(); void writeTS(); void writeProgramAssociationTable(); void writeProgramMap(); Loading media/java/android/media/MediaRecorder.java +3 −0 Original line number Diff line number Diff line Loading @@ -191,6 +191,9 @@ public class MediaRecorder /** @hide Stream over a socket, limited to a single stream */ public static final int OUTPUT_FORMAT_RTP_AVP = 7; /** @hide H.264/AAC data encapsulated in MPEG2/TS */ public static final int OUTPUT_FORMAT_MPEG2TS = 8; }; /** Loading media/libmedia/mediarecorder.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -181,7 +181,7 @@ status_t MediaRecorder::setOutputFormat(int of) LOGE("setOutputFormat called in an invalid state: %d", mCurrentState); return INVALID_OPERATION; } if (mIsVideoSourceSet && of >= OUTPUT_FORMAT_AUDIO_ONLY_START && of != OUTPUT_FORMAT_RTP_AVP) { //first non-video output format if (mIsVideoSourceSet && of >= OUTPUT_FORMAT_AUDIO_ONLY_START && of != OUTPUT_FORMAT_RTP_AVP && of != OUTPUT_FORMAT_MPEG2TS) { //first non-video output format LOGE("output format (%d) is meant for audio recording only and incompatible with video recording", of); return INVALID_OPERATION; } Loading media/libmediaplayerservice/StagefrightRecorder.cpp +50 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ #include <media/stagefright/AudioSource.h> #include <media/stagefright/AMRWriter.h> #include <media/stagefright/CameraSource.h> #include <media/stagefright/MPEG2TSWriter.h> #include <media/stagefright/MPEG4Writer.h> #include <media/stagefright/MediaDebug.h> #include <media/stagefright/MediaDefs.h> Loading Loading @@ -632,6 +633,9 @@ status_t StagefrightRecorder::start() { case OUTPUT_FORMAT_RTP_AVP: return startRTPRecording(); case OUTPUT_FORMAT_MPEG2TS: return startMPEG2TSRecording(); default: LOGE("Unsupported output file format: %d", mOutputFormat); return UNKNOWN_ERROR; Loading Loading @@ -799,6 +803,52 @@ status_t StagefrightRecorder::startRTPRecording() { return mWriter->start(); } status_t StagefrightRecorder::startMPEG2TSRecording() { CHECK_EQ(mOutputFormat, OUTPUT_FORMAT_MPEG2TS); sp<MediaWriter> writer = new MPEG2TSWriter(dup(mOutputFd)); if (mAudioSource != AUDIO_SOURCE_LIST_END) { if (mAudioEncoder != AUDIO_ENCODER_AAC) { return ERROR_UNSUPPORTED; } status_t err = setupAudioEncoder(writer); if (err != OK) { return err; } } if (mVideoSource == VIDEO_SOURCE_DEFAULT || mVideoSource == VIDEO_SOURCE_CAMERA) { if (mVideoEncoder != VIDEO_ENCODER_H264) { return ERROR_UNSUPPORTED; } sp<MediaSource> encoder; status_t err = setupVideoEncoder(&encoder); if (err != OK) { return err; } writer->addSource(encoder); } if (mMaxFileDurationUs != 0) { writer->setMaxFileDuration(mMaxFileDurationUs); } if (mMaxFileSizeBytes != 0) { writer->setMaxFileSize(mMaxFileSizeBytes); } mWriter = writer; return mWriter->start(); } void StagefrightRecorder::clipVideoFrameRate() { LOGV("clipVideoFrameRate: encoder %d", mVideoEncoder); int minFrameRate = mEncoderProfiles->getVideoEncoderParamByName( Loading Loading
include/media/mediarecorder.h +3 −0 Original line number Diff line number Diff line Loading @@ -76,6 +76,9 @@ enum output_format { /* Stream over a socket, limited to a single stream */ OUTPUT_FORMAT_RTP_AVP = 7, /* H.264/AAC data encapsulated in MPEG2/TS */ OUTPUT_FORMAT_MPEG2TS = 8, OUTPUT_FORMAT_LIST_END // must be last - used to validate format type }; Loading
include/media/stagefright/MPEG2TSWriter.h +5 −0 Original line number Diff line number Diff line Loading @@ -25,7 +25,10 @@ namespace android { struct ABuffer; struct MPEG2TSWriter : public MediaWriter { MPEG2TSWriter(int fd); MPEG2TSWriter(const char *filename); virtual status_t addSource(const sp<MediaSource> &source); Loading Loading @@ -59,6 +62,8 @@ private: int64_t mNumTSPacketsWritten; int64_t mNumTSPacketsBeforeMeta; void init(); void writeTS(); void writeProgramAssociationTable(); void writeProgramMap(); Loading
media/java/android/media/MediaRecorder.java +3 −0 Original line number Diff line number Diff line Loading @@ -191,6 +191,9 @@ public class MediaRecorder /** @hide Stream over a socket, limited to a single stream */ public static final int OUTPUT_FORMAT_RTP_AVP = 7; /** @hide H.264/AAC data encapsulated in MPEG2/TS */ public static final int OUTPUT_FORMAT_MPEG2TS = 8; }; /** Loading
media/libmedia/mediarecorder.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -181,7 +181,7 @@ status_t MediaRecorder::setOutputFormat(int of) LOGE("setOutputFormat called in an invalid state: %d", mCurrentState); return INVALID_OPERATION; } if (mIsVideoSourceSet && of >= OUTPUT_FORMAT_AUDIO_ONLY_START && of != OUTPUT_FORMAT_RTP_AVP) { //first non-video output format if (mIsVideoSourceSet && of >= OUTPUT_FORMAT_AUDIO_ONLY_START && of != OUTPUT_FORMAT_RTP_AVP && of != OUTPUT_FORMAT_MPEG2TS) { //first non-video output format LOGE("output format (%d) is meant for audio recording only and incompatible with video recording", of); return INVALID_OPERATION; } Loading
media/libmediaplayerservice/StagefrightRecorder.cpp +50 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ #include <media/stagefright/AudioSource.h> #include <media/stagefright/AMRWriter.h> #include <media/stagefright/CameraSource.h> #include <media/stagefright/MPEG2TSWriter.h> #include <media/stagefright/MPEG4Writer.h> #include <media/stagefright/MediaDebug.h> #include <media/stagefright/MediaDefs.h> Loading Loading @@ -632,6 +633,9 @@ status_t StagefrightRecorder::start() { case OUTPUT_FORMAT_RTP_AVP: return startRTPRecording(); case OUTPUT_FORMAT_MPEG2TS: return startMPEG2TSRecording(); default: LOGE("Unsupported output file format: %d", mOutputFormat); return UNKNOWN_ERROR; Loading Loading @@ -799,6 +803,52 @@ status_t StagefrightRecorder::startRTPRecording() { return mWriter->start(); } status_t StagefrightRecorder::startMPEG2TSRecording() { CHECK_EQ(mOutputFormat, OUTPUT_FORMAT_MPEG2TS); sp<MediaWriter> writer = new MPEG2TSWriter(dup(mOutputFd)); if (mAudioSource != AUDIO_SOURCE_LIST_END) { if (mAudioEncoder != AUDIO_ENCODER_AAC) { return ERROR_UNSUPPORTED; } status_t err = setupAudioEncoder(writer); if (err != OK) { return err; } } if (mVideoSource == VIDEO_SOURCE_DEFAULT || mVideoSource == VIDEO_SOURCE_CAMERA) { if (mVideoEncoder != VIDEO_ENCODER_H264) { return ERROR_UNSUPPORTED; } sp<MediaSource> encoder; status_t err = setupVideoEncoder(&encoder); if (err != OK) { return err; } writer->addSource(encoder); } if (mMaxFileDurationUs != 0) { writer->setMaxFileDuration(mMaxFileDurationUs); } if (mMaxFileSizeBytes != 0) { writer->setMaxFileSize(mMaxFileSizeBytes); } mWriter = writer; return mWriter->start(); } void StagefrightRecorder::clipVideoFrameRate() { LOGV("clipVideoFrameRate: encoder %d", mVideoEncoder); int minFrameRate = mEncoderProfiles->getVideoEncoderParamByName( Loading