From db08f1586cb929fb0738ca65b7c2737aaef08069 Mon Sep 17 00:00:00 2001 From: winlin Date: Mon, 1 Jan 2018 22:32:54 +0800 Subject: [PATCH] For #913, APP support complex error. --- trunk/src/app/srs_app_dash.cpp | 234 +++++++++------------ trunk/src/app/srs_app_dvr.cpp | 99 ++++----- trunk/src/libs/srs_lib_bandwidth.cpp | 48 ++++- trunk/src/libs/srs_lib_bandwidth.hpp | 2 +- trunk/src/libs/srs_lib_simple_socket.cpp | 32 ++- trunk/src/libs/srs_lib_simple_socket.hpp | 16 +- trunk/src/libs/srs_librtmp.cpp | 248 +++++++++++++++-------- trunk/src/main/srs_main_ingest_hls.cpp | 152 +++++++++----- trunk/src/main/srs_main_mp4_parser.cpp | 26 ++- trunk/src/utest/srs_utest_amf0.cpp | 113 +++++------ trunk/src/utest/srs_utest_kernel.cpp | 174 ++++------------ trunk/src/utest/srs_utest_kernel.hpp | 12 +- trunk/src/utest/srs_utest_protocol.cpp | 42 ++-- trunk/src/utest/srs_utest_protocol.hpp | 16 +- 14 files changed, 623 insertions(+), 591 deletions(-) diff --git a/trunk/src/app/srs_app_dash.cpp b/trunk/src/app/srs_app_dash.cpp index 6eb56e41a..252e80a24 100644 --- a/trunk/src/app/srs_app_dash.cpp +++ b/trunk/src/app/srs_app_dash.cpp @@ -49,25 +49,24 @@ SrsInitMp4::~SrsInitMp4() srs_freep(fw); } -int SrsInitMp4::write(SrsFormat* format, bool video, int tid) +srs_error_t SrsInitMp4::write(SrsFormat* format, bool video, int tid) { - int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; string path_tmp = tmppath(); - if ((ret = fw->open(path_tmp)) != ERROR_SUCCESS) { - srs_error("DASH: Open init mp4 failed, path=%s, ret=%d", path_tmp.c_str(), ret); - return ret; + if ((err = fw->open(path_tmp)) != srs_success) { + return srs_error_wrap(err, "Open init mp4 failed, path=%s", path_tmp.c_str()); } - if ((ret = init->initialize(fw)) != ERROR_SUCCESS) { - return ret; + if ((err = init->initialize(fw)) != srs_success) { + return srs_error_wrap(err, "init"); } - if ((ret = init->write(format, video, tid)) != ERROR_SUCCESS) { - return ret; + if ((err = init->write(format, video, tid)) != srs_success) { + return srs_error_wrap(err, "write init"); } - return ret; + return err; } SrsFragmentedMp4::SrsFragmentedMp4() @@ -82,52 +81,47 @@ SrsFragmentedMp4::~SrsFragmentedMp4() srs_freep(fw); } -int SrsFragmentedMp4::initialize(SrsRequest* r, bool video, SrsMpdWriter* mpd, uint32_t tid) +srs_error_t SrsFragmentedMp4::initialize(SrsRequest* r, bool video, SrsMpdWriter* mpd, uint32_t tid) { - int ret = ERROR_SUCCESS; srs_error_t err = srs_success; string file_home; string file_name; int64_t sequence_number; uint64_t basetime; - if ((ret = mpd->get_fragment(video, file_home, file_name, sequence_number, basetime)) != ERROR_SUCCESS) { - return ret; + if ((err = mpd->get_fragment(video, file_home, file_name, sequence_number, basetime)) != srs_success) { + return srs_error_wrap(err, "get fragment"); } string home = _srs_config->get_dash_path(r->vhost); set_path(home + "/" + file_home + "/" + file_name); if ((err = create_dir()) != srs_success) { - // TODO: FIXME: Use error - ret = srs_error_code(err); - srs_freep(err); - return ret; + return srs_error_wrap(err, "create dir"); } string path_tmp = tmppath(); - if ((ret = fw->open(path_tmp)) != ERROR_SUCCESS) { - srs_error("DASH: Open fmp4 failed, path=%s, ret=%d", path_tmp.c_str(), ret); - return ret; + if ((err = fw->open(path_tmp)) != srs_success) { + return srs_error_wrap(err, "Open fmp4 failed, path=%s", path_tmp.c_str()); } - if ((ret = enc->initialize(fw, (uint32_t)sequence_number, basetime, tid)) != ERROR_SUCCESS) { - return ret; + if ((err = enc->initialize(fw, (uint32_t)sequence_number, basetime, tid)) != srs_success) { + return srs_error_wrap(err, "init encoder"); } - return ret; + return err; } -int SrsFragmentedMp4::write(SrsSharedPtrMessage* shared_msg, SrsFormat* format) +srs_error_t SrsFragmentedMp4::write(SrsSharedPtrMessage* shared_msg, SrsFormat* format) { - int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; if (shared_msg->is_audio()) { uint8_t* sample = (uint8_t*)format->raw; uint32_t nb_sample = (uint32_t)format->nb_raw; uint32_t dts = (uint32_t)shared_msg->timestamp; - ret = enc->write_sample(SrsMp4HandlerTypeSOUN, 0x00, dts, dts, sample, nb_sample); + err = enc->write_sample(SrsMp4HandlerTypeSOUN, 0x00, dts, dts, sample, nb_sample); } else if (shared_msg->is_video()) { SrsVideoAvcFrameType frame_type = format->video->frame_type; uint32_t cts = (uint32_t)format->video->cts; @@ -137,36 +131,31 @@ int SrsFragmentedMp4::write(SrsSharedPtrMessage* shared_msg, SrsFormat* format) uint8_t* sample = (uint8_t*)format->raw; uint32_t nb_sample = (uint32_t)format->nb_raw; - ret = enc->write_sample(SrsMp4HandlerTypeVIDE, frame_type, dts, pts, sample, nb_sample); + err = enc->write_sample(SrsMp4HandlerTypeVIDE, frame_type, dts, pts, sample, nb_sample); } else { - return ret; + return err; } append(shared_msg->timestamp); - return ret; + return err; } -int SrsFragmentedMp4::reap(uint64_t& dts) +srs_error_t SrsFragmentedMp4::reap(uint64_t& dts) { - int ret = ERROR_SUCCESS; srs_error_t err = srs_success; - if ((ret = enc->flush(dts)) != ERROR_SUCCESS) { - srs_error("DASH: Flush encoder failed, ret=%d", ret); - return ret; + if ((err = enc->flush(dts)) != srs_success) { + return srs_error_wrap(err, "Flush encoder failed"); } srs_freep(fw); if ((err = rename()) != srs_success) { - // TODO: FIXME: Use error - ret = srs_error_code(err); - srs_freep(err); - return ret; + return srs_error_wrap(err, "rename"); } - return ret; + return err; } SrsMpdWriter::SrsMpdWriter() @@ -196,14 +185,13 @@ srs_error_t SrsMpdWriter::initialize(SrsRequest* r) return srs_success; } -int SrsMpdWriter::write(SrsFormat* format) +srs_error_t SrsMpdWriter::write(SrsFormat* format) { - int ret = ERROR_SUCCESS; srs_error_t err = srs_success; // MPD is not expired? if (last_update_mpd != -1 && srs_get_system_time_ms() - last_update_mpd < update_period) { - return ret; + return err; } last_update_mpd = srs_get_system_time_ms(); @@ -214,11 +202,7 @@ int SrsMpdWriter::write(SrsFormat* format) fragment_home = srs_path_dirname(mpd_path) + "/" + req->stream; if ((err = srs_create_dir_recursively(full_home)) != srs_success) { - // TODO: FIXME: Use error - ret = srs_error_code(err); - srs_freep(err); - srs_error("DASH: Create MPD home failed, home=%s, ret=%d", full_home.c_str(), ret); - return ret; + return srs_error_wrap(err, "Create MPD home failed, home=%s", full_home.c_str()); } stringstream ss; @@ -257,31 +241,27 @@ int SrsMpdWriter::write(SrsFormat* format) SrsAutoFree(SrsFileWriter, fw); string full_path_tmp = full_path + ".tmp"; - if ((ret = fw->open(full_path_tmp)) != ERROR_SUCCESS) { - srs_error("DASH: Open MPD file=%s failed, ret=%d", full_path_tmp.c_str(), ret); - return ret; + if ((err = fw->open(full_path_tmp)) != srs_success) { + return srs_error_wrap(err, "Open MPD file=%s failed", full_path_tmp.c_str()); } string content = ss.str(); - if ((ret = fw->write((void*)content.data(), content.length(), NULL)) != ERROR_SUCCESS) { - srs_error("DASH: Write MPD file=%s failed, ret=%d", full_path.c_str(), ret); - return ret; + if ((err = fw->write((void*)content.data(), content.length(), NULL)) != srs_success) { + return srs_error_wrap(err, "Write MPD file=%s failed", full_path.c_str()); } if (::rename(full_path_tmp.c_str(), full_path.c_str()) < 0) { - ret = ERROR_DASH_WRITE_FAILED; - srs_error("DASH: Rename %s to %s failed, ret=%d", full_path_tmp.c_str(), full_path.c_str(), ret); - return ret; + return srs_error_new(ERROR_DASH_WRITE_FAILED, "Rename %s to %s failed", full_path_tmp.c_str(), full_path.c_str()); } srs_trace("DASH: Refresh MPD success, size=%dB, file=%s", content.length(), full_path.c_str()); - return ret; + return err; } -int SrsMpdWriter::get_fragment(bool video, std::string& home, std::string& file_name, int64_t& sn, uint64_t& basetime) +srs_error_t SrsMpdWriter::get_fragment(bool video, std::string& home, std::string& file_name, int64_t& sn, uint64_t& basetime) { - int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; home = fragment_home; @@ -294,7 +274,7 @@ int SrsMpdWriter::get_fragment(bool video, std::string& home, std::string& file_ file_name = "audio-" + srs_int2str(sn) + ".m4s"; } - return ret; + return err; } SrsDashController::SrsDashController() @@ -320,7 +300,6 @@ SrsDashController::~SrsDashController() srs_error_t SrsDashController::initialize(SrsRequest* r) { - int ret = ERROR_SUCCESS; srs_error_t err = srs_success; req = r; @@ -335,125 +314,113 @@ srs_error_t SrsDashController::initialize(SrsRequest* r) srs_freep(vcurrent); vcurrent = new SrsFragmentedMp4(); - if ((ret = vcurrent->initialize(req, true, mpd, video_tack_id)) != ERROR_SUCCESS) { - return srs_error_new(ret, "video fragment"); + if ((err = vcurrent->initialize(req, true, mpd, video_tack_id)) != srs_success) { + return srs_error_wrap(err, "video fragment"); } srs_freep(acurrent); acurrent = new SrsFragmentedMp4(); - if ((ret = acurrent->initialize(req, false, mpd, audio_track_id)) != ERROR_SUCCESS) { - return srs_error_new(ret, "audio fragment"); + if ((err = acurrent->initialize(req, false, mpd, audio_track_id)) != srs_success) { + return srs_error_wrap(err, "audio fragment"); } return err; } -int SrsDashController::on_audio(SrsSharedPtrMessage* shared_audio, SrsFormat* format) +srs_error_t SrsDashController::on_audio(SrsSharedPtrMessage* shared_audio, SrsFormat* format) { - int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; if (format->is_aac_sequence_header()) { return refresh_init_mp4(shared_audio, format); } if (acurrent->duration() >= fragment) { - if ((ret = acurrent->reap(audio_dts)) != ERROR_SUCCESS) { - return ret; + if ((err = acurrent->reap(audio_dts)) != srs_success) { + return srs_error_wrap(err, "reap current"); } afragments->append(acurrent); acurrent = new SrsFragmentedMp4(); - if ((ret = acurrent->initialize(req, false, mpd, audio_track_id)) != ERROR_SUCCESS) { - srs_error("DASH: Initialize the audio fragment failed, ret=%d", ret); - return ret; + if ((err = acurrent->initialize(req, false, mpd, audio_track_id)) != srs_success) { + return srs_error_wrap(err, "Initialize the audio fragment failed"); } } - if ((ret = acurrent->write(shared_audio, format)) != ERROR_SUCCESS) { - srs_error("DASH: Write audio to fragment failed, ret=%d", ret); - return ret; + if ((err = acurrent->write(shared_audio, format)) != srs_success) { + return srs_error_wrap(err, "Write audio to fragment failed"); } - if ((ret = refresh_mpd(format)) != ERROR_SUCCESS) { - srs_error("DASH: Refresh the MPD failed. ret=%d", ret); - return ret; + if ((err = refresh_mpd(format)) != srs_success) { + return srs_error_wrap(err, "Refresh the MPD failed"); } - return ret; + return err; } -int SrsDashController::on_video(SrsSharedPtrMessage* shared_video, SrsFormat* format) +srs_error_t SrsDashController::on_video(SrsSharedPtrMessage* shared_video, SrsFormat* format) { - int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; if (format->is_avc_sequence_header()) { return refresh_init_mp4(shared_video, format); } - bool reopen = format->video->frame_type == SrsVideoAvcFrameTypeKeyFrame - && vcurrent->duration() >= fragment; + bool reopen = format->video->frame_type == SrsVideoAvcFrameTypeKeyFrame && vcurrent->duration() >= fragment; if (reopen) { - if ((ret = vcurrent->reap(video_dts)) != ERROR_SUCCESS) { - return ret; + if ((err = vcurrent->reap(video_dts)) != srs_success) { + return srs_error_wrap(err, "reap current"); } vfragments->append(vcurrent); vcurrent = new SrsFragmentedMp4(); - if ((ret = vcurrent->initialize(req, true, mpd, video_tack_id)) != ERROR_SUCCESS) { - srs_error("DASH: Initialize the video fragment failed, ret=%d", ret); - return ret; + if ((err = vcurrent->initialize(req, true, mpd, video_tack_id)) != srs_success) { + return srs_error_wrap(err, "Initialize the video fragment failed"); } } - if ((ret = vcurrent->write(shared_video, format)) != ERROR_SUCCESS) { - srs_error("DASH: Write video to fragment failed, ret=%d", ret); - return ret; + if ((err = vcurrent->write(shared_video, format)) != srs_success) { + return srs_error_wrap(err, "Write video to fragment failed"); } - if ((ret = refresh_mpd(format)) != ERROR_SUCCESS) { - srs_error("DASH: Refresh the MPD failed. ret=%d", ret); - return ret; + if ((err = refresh_mpd(format)) != srs_success) { + return srs_error_wrap(err, "Refresh the MPD failed"); } - return ret; + return err; } -int SrsDashController::refresh_mpd(SrsFormat* format) +srs_error_t SrsDashController::refresh_mpd(SrsFormat* format) { - int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; // TODO: FIXME: Support pure audio streaming. if (!format->acodec || !format->vcodec) { - return ret; + return err; } - if ((ret = mpd->write(format)) != ERROR_SUCCESS) { - return ret; + if ((err = mpd->write(format)) != srs_success) { + return srs_error_wrap(err, "write mpd"); } - return ret; + return err; } -int SrsDashController::refresh_init_mp4(SrsSharedPtrMessage* msg, SrsFormat* format) +srs_error_t SrsDashController::refresh_init_mp4(SrsSharedPtrMessage* msg, SrsFormat* format) { - int ret = ERROR_SUCCESS; srs_error_t err = srs_success; if (msg->size <= 0 || (msg->is_video() && !format->vcodec->is_avc_codec_ok()) || (msg->is_audio() && !format->acodec->is_aac_codec_ok())) { srs_warn("DASH: Ignore empty sequence header."); - return ret; + return err; } string full_home = home + "/" + req->app + "/" + req->stream; if ((err = srs_create_dir_recursively(full_home)) != srs_success) { - // TODO: FIXME: Use error - ret = srs_error_code(err); - srs_freep(err); - srs_error("DASH: Create media home failed, home=%s, ret=%d", full_home.c_str(), ret); - return ret; + return srs_error_wrap(err, "Create media home failed, home=%s", full_home.c_str()); } std::string path = full_home; @@ -469,20 +436,17 @@ int SrsDashController::refresh_init_mp4(SrsSharedPtrMessage* msg, SrsFormat* for init_mp4->set_path(path); int tid = msg->is_video()? video_tack_id:audio_track_id; - if ((ret = init_mp4->write(format, msg->is_video(), tid)) != ERROR_SUCCESS) { - return ret; + if ((err = init_mp4->write(format, msg->is_video(), tid)) != srs_success) { + return srs_error_wrap(err, "write init"); } if ((err = init_mp4->rename()) != srs_success) { - // TODO: FIXME: Use error - ret = srs_error_code(err); - srs_freep(err); - return ret; + return srs_error_wrap(err, "rename init"); } srs_trace("DASH: Refresh media success, file=%s", path.c_str()); - return ret; + return err; } SrsDash::SrsDash() @@ -513,53 +477,51 @@ srs_error_t SrsDash::initialize(SrsOriginHub* h, SrsRequest* r) return err; } -int SrsDash::on_publish() +srs_error_t SrsDash::on_publish() { - int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; // Prevent duplicated publish. if (enabled) { - return ret; + return err; } if (!_srs_config->get_dash_enabled(req->vhost)) { - return ret; + return err; } enabled = true; - return ret; + return err; } -int SrsDash::on_audio(SrsSharedPtrMessage* shared_audio, SrsFormat* format) +srs_error_t SrsDash::on_audio(SrsSharedPtrMessage* shared_audio, SrsFormat* format) { - int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; if (!enabled) { - return ret; + return err; } - if ((ret = controller->on_audio(shared_audio, format)) != ERROR_SUCCESS) { - srs_error("DASH: Consume audio failed. ret=%d", ret); - return ret; + if ((err = controller->on_audio(shared_audio, format)) != srs_success) { + return srs_error_wrap(err, "Consume audio failed"); } - return ret; + return err; } -int SrsDash::on_video(SrsSharedPtrMessage* shared_video, SrsFormat* format) +srs_error_t SrsDash::on_video(SrsSharedPtrMessage* shared_video, SrsFormat* format) { - int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; if (!enabled) { - return ret; + return err; } - if ((ret = controller->on_video(shared_video, format)) != ERROR_SUCCESS) { - srs_error("DASH: Consume video failed. ret=%d", ret); - return ret; + if ((err = controller->on_video(shared_video, format)) != srs_success) { + return srs_error_wrap(err, "Consume video failed"); } - return ret; + return err; } void SrsDash::on_unpublish() diff --git a/trunk/src/app/srs_app_dvr.cpp b/trunk/src/app/srs_app_dvr.cpp index b544d912c..bd4f61330 100644 --- a/trunk/src/app/srs_app_dvr.cpp +++ b/trunk/src/app/srs_app_dvr.cpp @@ -83,7 +83,6 @@ SrsFragment* SrsDvrSegmenter::current() srs_error_t SrsDvrSegmenter::open() { - int ret = ERROR_SUCCESS; srs_error_t err = srs_success; // ignore when already open. @@ -108,8 +107,8 @@ srs_error_t SrsDvrSegmenter::open() // open file writer, in append or create mode. string tmp_dvr_file = fragment->tmppath(); - if ((ret = fs->open(tmp_dvr_file)) != ERROR_SUCCESS) { - return srs_error_new(ret, "open file %s", path.c_str()); + if ((err = fs->open(tmp_dvr_file)) != srs_success) { + return srs_error_wrap(err, "open file %s", path.c_str()); } // initialize the encoder. @@ -256,7 +255,6 @@ SrsDvrFlvSegmenter::~SrsDvrFlvSegmenter() srs_error_t SrsDvrFlvSegmenter::refresh_metadata() { - int ret = ERROR_SUCCESS; srs_error_t err = srs_success; // no duration or filesize specified. @@ -270,24 +268,21 @@ srs_error_t SrsDvrFlvSegmenter::refresh_metadata() char* buf = new char[SrsAmf0Size::number()]; SrsAutoFreeA(char, buf); - SrsBuffer stream; - if ((ret = stream.initialize(buf, SrsAmf0Size::number())) != ERROR_SUCCESS) { - return srs_error_new(ret, "init stream"); - } + SrsBuffer stream(buf, SrsAmf0Size::number()); // filesize to buf. SrsAmf0Any* size = SrsAmf0Any::number((double)cur); SrsAutoFree(SrsAmf0Any, size); stream.skip(-1 * stream.pos()); - if ((ret = size->write(&stream)) != ERROR_SUCCESS) { - return srs_error_new(ret, "write filesize"); + if ((err = size->write(&stream)) != srs_success) { + return srs_error_wrap(err, "write filesize"); } // update the flesize. fs->seek2(filesize_offset); - if ((ret = fs->write(buf, SrsAmf0Size::number(), NULL)) != ERROR_SUCCESS) { - return srs_error_new(ret, "update filesize"); + if ((err = fs->write(buf, SrsAmf0Size::number(), NULL)) != srs_success) { + return srs_error_wrap(err, "update filesize"); } // duration to buf @@ -295,14 +290,14 @@ srs_error_t SrsDvrFlvSegmenter::refresh_metadata() SrsAutoFree(SrsAmf0Any, dur); stream.skip(-1 * stream.pos()); - if ((ret = dur->write(&stream)) != ERROR_SUCCESS) { - return srs_error_new(ret, "write duration"); + if ((err = dur->write(&stream)) != srs_success) { + return srs_error_wrap(err, "write duration"); } // update the duration fs->seek2(duration_offset); - if ((ret = fs->write(buf, SrsAmf0Size::number(), NULL)) != ERROR_SUCCESS) { - return srs_error_new(ret, "update duration"); + if ((err = fs->write(buf, SrsAmf0Size::number(), NULL)) != srs_success) { + return srs_error_wrap(err, "update duration"); } // reset the offset. @@ -313,7 +308,6 @@ srs_error_t SrsDvrFlvSegmenter::refresh_metadata() srs_error_t SrsDvrFlvSegmenter::open_encoder() { - int ret = ERROR_SUCCESS; srs_error_t err = srs_success; has_keyframe = false; @@ -325,13 +319,13 @@ srs_error_t SrsDvrFlvSegmenter::open_encoder() srs_freep(enc); enc = new SrsFlvTransmuxer(); - if ((ret = enc->initialize(fs)) != ERROR_SUCCESS) { - return srs_error_new(ret, "init encoder"); + if ((err = enc->initialize(fs)) != srs_success) { + return srs_error_wrap(err, "init encoder"); } // write the flv header to writer. - if ((ret = enc->write_header()) != ERROR_SUCCESS) { - return srs_error_new(ret, "write flv header"); + if ((err = enc->write_header()) != srs_success) { + return srs_error_wrap(err, "write flv header"); } return err; @@ -339,29 +333,25 @@ srs_error_t SrsDvrFlvSegmenter::open_encoder() srs_error_t SrsDvrFlvSegmenter::encode_metadata(SrsSharedPtrMessage* metadata) { - int ret = ERROR_SUCCESS; srs_error_t err = srs_success; // Ignore when metadata already written. if (duration_offset || filesize_offset) { return err; } - - SrsBuffer stream; - if ((ret = stream.initialize(metadata->payload, metadata->size)) != ERROR_SUCCESS) { - return srs_error_new(ret, "init stream"); - } + + SrsBuffer stream(metadata->payload, metadata->size); SrsAmf0Any* name = SrsAmf0Any::str(); SrsAutoFree(SrsAmf0Any, name); - if ((ret = name->read(&stream)) != ERROR_SUCCESS) { - return srs_error_new(ret, "read name"); + if ((err = name->read(&stream)) != srs_success) { + return srs_error_wrap(err, "read name"); } SrsAmf0Object* obj = SrsAmf0Any::object(); SrsAutoFree(SrsAmf0Object, obj); - if ((ret = obj->read(&stream)) != ERROR_SUCCESS) { - return srs_error_new(ret, "read object"); + if ((err = obj->read(&stream)) != srs_success) { + return srs_error_wrap(err, "read object"); } // remove duration and filesize. @@ -383,19 +373,18 @@ srs_error_t SrsDvrFlvSegmenter::encode_metadata(SrsSharedPtrMessage* metadata) filesize_offset = duration_offset - SrsAmf0Size::utf8("duration") - SrsAmf0Size::number(); // convert metadata to bytes. - if ((ret = stream.initialize(payload, size)) != ERROR_SUCCESS) { - return srs_error_new(ret, "init stream"); + SrsBuffer buf(payload, size); + + if ((err = name->write(&buf)) != srs_success) { + return srs_error_wrap(err, "write name"); } - if ((ret = name->write(&stream)) != ERROR_SUCCESS) { - return srs_error_new(ret, "write name"); - } - if ((ret = obj->write(&stream)) != ERROR_SUCCESS) { - return srs_error_new(ret, "write object"); + if ((err = obj->write(&buf)) != srs_success) { + return srs_error_wrap(err, "write object"); } // to flv file. - if ((ret = enc->write_metadata(18, payload, size)) != ERROR_SUCCESS) { - return srs_error_new(ret, "write metadata"); + if ((err = enc->write_metadata(18, payload, size)) != srs_success) { + return srs_error_wrap(err, "write metadata"); } return err; @@ -403,13 +392,12 @@ srs_error_t SrsDvrFlvSegmenter::encode_metadata(SrsSharedPtrMessage* metadata) srs_error_t SrsDvrFlvSegmenter::encode_audio(SrsSharedPtrMessage* audio, SrsFormat* format) { - int ret = ERROR_SUCCESS; srs_error_t err = srs_success; char* payload = audio->payload; int size = audio->size; - if ((ret = enc->write_audio(audio->timestamp, payload, size)) != ERROR_SUCCESS) { - return srs_error_new(ret, "write audio"); + if ((err = enc->write_audio(audio->timestamp, payload, size)) != srs_success) { + return srs_error_wrap(err, "write audio"); } return err; @@ -417,7 +405,6 @@ srs_error_t SrsDvrFlvSegmenter::encode_audio(SrsSharedPtrMessage* audio, SrsForm srs_error_t SrsDvrFlvSegmenter::encode_video(SrsSharedPtrMessage* video, SrsFormat* format) { - int ret = ERROR_SUCCESS; srs_error_t err = srs_success; char* payload = video->payload; @@ -435,8 +422,8 @@ srs_error_t SrsDvrFlvSegmenter::encode_video(SrsSharedPtrMessage* video, SrsForm return err; } - if ((ret = enc->write_video(video->timestamp, payload, size)) != ERROR_SUCCESS) { - return srs_error_new(ret, "write video"); + if ((err = enc->write_video(video->timestamp, payload, size)) != srs_success) { + return srs_error_wrap(err, "write video"); } return err; @@ -464,14 +451,13 @@ srs_error_t SrsDvrMp4Segmenter::refresh_metadata() srs_error_t SrsDvrMp4Segmenter::open_encoder() { - int ret = ERROR_SUCCESS; srs_error_t err = srs_success; srs_freep(enc); enc = new SrsMp4Encoder(); - if ((ret = enc->initialize(fs)) != ERROR_SUCCESS) { - return srs_error_new(ret, "init encoder"); + if ((err = enc->initialize(fs)) != srs_success) { + return srs_error_wrap(err, "init encoder"); } return err; @@ -484,7 +470,6 @@ srs_error_t SrsDvrMp4Segmenter::encode_metadata(SrsSharedPtrMessage* /*metadata* srs_error_t SrsDvrMp4Segmenter::encode_audio(SrsSharedPtrMessage* audio, SrsFormat* format) { - int ret = ERROR_SUCCESS; srs_error_t err = srs_success; SrsAudioCodecId sound_format = format->acodec->id; @@ -504,8 +489,8 @@ srs_error_t SrsDvrMp4Segmenter::encode_audio(SrsSharedPtrMessage* audio, SrsForm uint32_t nb_sample = (uint32_t)format->nb_raw; uint32_t dts = (uint32_t)audio->timestamp; - if ((ret = enc->write_sample(SrsMp4HandlerTypeSOUN, 0x00, ct, dts, dts, sample, nb_sample)) != ERROR_SUCCESS) { - return srs_error_new(ret, "write sample"); + if ((err = enc->write_sample(SrsMp4HandlerTypeSOUN, 0x00, ct, dts, dts, sample, nb_sample)) != srs_success) { + return srs_error_wrap(err, "write sample"); } return err; @@ -513,7 +498,6 @@ srs_error_t SrsDvrMp4Segmenter::encode_audio(SrsSharedPtrMessage* audio, SrsForm srs_error_t SrsDvrMp4Segmenter::encode_video(SrsSharedPtrMessage* video, SrsFormat* format) { - int ret = ERROR_SUCCESS; srs_error_t err = srs_success; SrsVideoAvcFrameType frame_type = format->video->frame_type; @@ -531,8 +515,8 @@ srs_error_t SrsDvrMp4Segmenter::encode_video(SrsSharedPtrMessage* video, SrsForm uint8_t* sample = (uint8_t*)format->raw; uint32_t nb_sample = (uint32_t)format->nb_raw; - if ((ret = enc->write_sample(SrsMp4HandlerTypeVIDE, frame_type, ct, dts, pts, sample, nb_sample)) != ERROR_SUCCESS) { - return srs_error_new(ret, "write sample"); + if ((err = enc->write_sample(SrsMp4HandlerTypeVIDE, frame_type, ct, dts, pts, sample, nb_sample)) != srs_success) { + return srs_error_wrap(err, "write sample"); } return err; @@ -540,11 +524,10 @@ srs_error_t SrsDvrMp4Segmenter::encode_video(SrsSharedPtrMessage* video, SrsForm srs_error_t SrsDvrMp4Segmenter::close_encoder() { - int ret = ERROR_SUCCESS; srs_error_t err = srs_success; - if ((ret = enc->flush()) != ERROR_SUCCESS) { - return srs_error_new(ret, "flush encoder"); + if ((err = enc->flush()) != srs_success) { + return srs_error_wrap(err, "flush encoder"); } return err; diff --git a/trunk/src/libs/srs_lib_bandwidth.cpp b/trunk/src/libs/srs_lib_bandwidth.cpp index ce954d06e..81307a304 100644 --- a/trunk/src/libs/srs_lib_bandwidth.cpp +++ b/trunk/src/libs/srs_lib_bandwidth.cpp @@ -65,11 +65,14 @@ bool _bandwidth_is_finish(SrsBandwidthPacket* pkt) int _srs_expect_bandwidth_packet(SrsRtmpClient* rtmp, _CheckPacketType pfn) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; while (true) { SrsCommonMessage* msg = NULL; SrsBandwidthPacket* pkt = NULL; - if ((ret = rtmp->expect_message(&msg, &pkt)) != ERROR_SUCCESS) { + if ((err = rtmp->expect_message(&msg, &pkt)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } SrsAutoFree(SrsCommonMessage, msg); @@ -86,11 +89,14 @@ int _srs_expect_bandwidth_packet(SrsRtmpClient* rtmp, _CheckPacketType pfn) int _srs_expect_bandwidth_packet2(SrsRtmpClient* rtmp, _CheckPacketType pfn, SrsBandwidthPacket** ppkt) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; while (true) { SrsCommonMessage* msg = NULL; SrsBandwidthPacket* pkt = NULL; - if ((ret = rtmp->expect_message(&msg, &pkt)) != ERROR_SUCCESS) { + if ((err = rtmp->expect_message(&msg, &pkt)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } SrsAutoFree(SrsCommonMessage, msg); @@ -159,7 +165,7 @@ int SrsBandwidthClient::bandwidth_check( } SrsBandwidthPacket* pkt = NULL; - if ((ret = final(&pkt)) != ERROR_SUCCESS) { + if ((ret = do_final(&pkt)) != ERROR_SUCCESS) { return ret; } SrsAutoFree(SrsBandwidthPacket, pkt); @@ -196,6 +202,7 @@ int SrsBandwidthClient::bandwidth_check( int SrsBandwidthClient::play_start() { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; if ((ret = _srs_expect_bandwidth_packet(_rtmp, _bandwidth_is_start_play)) != ERROR_SUCCESS) { return ret; @@ -206,7 +213,9 @@ int SrsBandwidthClient::play_start() // send start play response to server. SrsBandwidthPacket* pkt = SrsBandwidthPacket::create_starting_play(); - if ((ret = _rtmp->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) { + if ((err = _rtmp->send_and_free_packet(pkt, 0)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); srs_error("send bandwidth check start play message failed. ret=%d", ret); return ret; } @@ -225,6 +234,7 @@ int SrsBandwidthClient::play_checking() int SrsBandwidthClient::play_stop() { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; if ((ret = _srs_expect_bandwidth_packet(_rtmp, _bandwidth_is_stop_play)) != ERROR_SUCCESS) { return ret; @@ -235,7 +245,9 @@ int SrsBandwidthClient::play_stop() // send stop play response to server. SrsBandwidthPacket* pkt = SrsBandwidthPacket::create_stopped_play(); - if ((ret = _rtmp->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) { + if ((err = _rtmp->send_and_free_packet(pkt, 0)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); srs_error("send bandwidth check stop play message failed. ret=%d", ret); return ret; } @@ -248,6 +260,7 @@ int SrsBandwidthClient::play_stop() int SrsBandwidthClient::publish_start(int& duration_ms, int& play_kbps) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; if (true) { SrsBandwidthPacket* pkt = NULL; @@ -270,7 +283,9 @@ int SrsBandwidthClient::publish_start(int& duration_ms, int& play_kbps) // send start publish response to server. SrsBandwidthPacket* pkt = SrsBandwidthPacket::create_starting_publish(); - if ((ret = _rtmp->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) { + if ((err = _rtmp->send_and_free_packet(pkt, 0)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); srs_error("send bandwidth check start publish message failed. ret=%d", ret); return ret; } @@ -283,6 +298,7 @@ int SrsBandwidthClient::publish_start(int& duration_ms, int& play_kbps) int SrsBandwidthClient::publish_checking(int duration_ms, int play_kbps) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; if (duration_ms <= 0) { ret = ERROR_RTMP_BWTC_DATA; @@ -312,7 +328,9 @@ int SrsBandwidthClient::publish_checking(int duration_ms, int play_kbps) } data_count += 2; - if ((ret = _rtmp->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) { + if ((err = _rtmp->send_and_free_packet(pkt, 0)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); srs_error("send bandwidth check publish messages failed. ret=%d", ret); return ret; } @@ -338,12 +356,15 @@ int SrsBandwidthClient::publish_checking(int duration_ms, int play_kbps) int SrsBandwidthClient::publish_stop() { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; if (true) { // send start publish response to server. SrsBandwidthPacket* pkt = SrsBandwidthPacket::create_stop_publish(); - if ((ret = _rtmp->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) { + if ((err = _rtmp->send_and_free_packet(pkt, 0)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); srs_error("send bandwidth check stop publish message failed. ret=%d", ret); return ret; } @@ -359,7 +380,9 @@ int SrsBandwidthClient::publish_stop() // send start publish response to server. SrsBandwidthPacket* pkt = SrsBandwidthPacket::create_stopped_publish(); - if ((ret = _rtmp->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) { + if ((err = _rtmp->send_and_free_packet(pkt, 0)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); srs_error("send bandwidth check stop publish message failed. ret=%d", ret); return ret; } @@ -369,9 +392,10 @@ int SrsBandwidthClient::publish_stop() return ret; } -int SrsBandwidthClient::final(SrsBandwidthPacket** ppkt) +int SrsBandwidthClient::do_final(SrsBandwidthPacket** ppkt) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; if ((ret = _srs_expect_bandwidth_packet2(_rtmp, _bandwidth_is_finish, ppkt)) != ERROR_SUCCESS) { return ret; @@ -382,7 +406,9 @@ int SrsBandwidthClient::final(SrsBandwidthPacket** ppkt) // send final response to server. SrsBandwidthPacket* pkt = SrsBandwidthPacket::create_final(); - if ((ret = _rtmp->send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) { + if ((err = _rtmp->send_and_free_packet(pkt, 0)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); srs_error("send bandwidth check final message failed. ret=%d", ret); return ret; } diff --git a/trunk/src/libs/srs_lib_bandwidth.hpp b/trunk/src/libs/srs_lib_bandwidth.hpp index 7d60a82da..548ea6cce 100644 --- a/trunk/src/libs/srs_lib_bandwidth.hpp +++ b/trunk/src/libs/srs_lib_bandwidth.hpp @@ -78,7 +78,7 @@ private: /** * report and final packet */ - virtual int final(SrsBandwidthPacket** ppkt); + virtual int do_final(SrsBandwidthPacket** ppkt); }; #endif diff --git a/trunk/src/libs/srs_lib_simple_socket.cpp b/trunk/src/libs/srs_lib_simple_socket.cpp index 5b017ff7b..6ad58b27c 100644 --- a/trunk/src/libs/srs_lib_simple_socket.cpp +++ b/trunk/src/libs/srs_lib_simple_socket.cpp @@ -342,10 +342,14 @@ int SimpleSocketStream::connect(const char* server_ip, int port) } // ISrsReader -int SimpleSocketStream::read(void* buf, size_t size, ssize_t* nread) +srs_error_t SimpleSocketStream::read(void* buf, size_t size, ssize_t* nread) { srs_assert(io); - return srs_hijack_io_read(io, buf, size, nread); + int ret = srs_hijack_io_read(io, buf, size, nread); + if (ret != ERROR_SUCCESS) { + return srs_error_new(ret, "read"); + } + return srs_success; } // ISrsProtocolReader @@ -386,10 +390,14 @@ int64_t SimpleSocketStream::get_send_bytes() return srs_hijack_io_get_send_bytes(io); } -int SimpleSocketStream::writev(const iovec *iov, int iov_size, ssize_t* nwrite) +srs_error_t SimpleSocketStream::writev(const iovec *iov, int iov_size, ssize_t* nwrite) { srs_assert(io); - return srs_hijack_io_writev(io, iov, iov_size, nwrite); + int ret = srs_hijack_io_writev(io, iov, iov_size, nwrite); + if (ret != ERROR_SUCCESS) { + return srs_error_new(ret, "read"); + } + return srs_success; } // ISrsProtocolReaderWriter @@ -399,16 +407,24 @@ bool SimpleSocketStream::is_never_timeout(int64_t tm) return srs_hijack_io_is_never_timeout(io, tm); } -int SimpleSocketStream::read_fully(void* buf, size_t size, ssize_t* nread) +srs_error_t SimpleSocketStream::read_fully(void* buf, size_t size, ssize_t* nread) { srs_assert(io); - return srs_hijack_io_read_fully(io, buf, size, nread); + int ret = srs_hijack_io_read_fully(io, buf, size, nread); + if (ret != ERROR_SUCCESS) { + return srs_error_new(ret, "read"); + } + return srs_success; } -int SimpleSocketStream::write(void* buf, size_t size, ssize_t* nwrite) +srs_error_t SimpleSocketStream::write(void* buf, size_t size, ssize_t* nwrite) { srs_assert(io); - return srs_hijack_io_write(io, buf, size, nwrite); + int ret = srs_hijack_io_write(io, buf, size, nwrite); + if (ret != ERROR_SUCCESS) { + return srs_error_new(ret, "read"); + } + return srs_success; } diff --git a/trunk/src/libs/srs_lib_simple_socket.hpp b/trunk/src/libs/srs_lib_simple_socket.hpp index ea6afaec5..3452be0e8 100644 --- a/trunk/src/libs/srs_lib_simple_socket.hpp +++ b/trunk/src/libs/srs_lib_simple_socket.hpp @@ -49,25 +49,25 @@ public: virtual srs_hijack_io_t hijack_io(); virtual int create_socket(srs_rtmp_t owner); virtual int connect(const char* server, int port); - // ISrsReader +// ISrsReader public: - virtual int read(void* buf, size_t size, ssize_t* nread); - // ISrsProtocolReader + virtual srs_error_t read(void* buf, size_t size, ssize_t* nread); +// ISrsProtocolReader public: virtual void set_recv_timeout(int64_t tm); virtual int64_t get_recv_timeout(); virtual int64_t get_recv_bytes(); - // ISrsProtocolWriter +// ISrsProtocolWriter public: virtual void set_send_timeout(int64_t tm); virtual int64_t get_send_timeout(); virtual int64_t get_send_bytes(); - virtual int writev(const iovec *iov, int iov_size, ssize_t* nwrite); - // ISrsProtocolReaderWriter + virtual srs_error_t writev(const iovec *iov, int iov_size, ssize_t* nwrite); +// ISrsProtocolReaderWriter public: virtual bool is_never_timeout(int64_t tm); - virtual int read_fully(void* buf, size_t size, ssize_t* nread); - virtual int write(void* buf, size_t size, ssize_t* nwrite); + virtual srs_error_t read_fully(void* buf, size_t size, ssize_t* nread); + virtual srs_error_t write(void* buf, size_t size, ssize_t* nwrite); }; #endif diff --git a/trunk/src/libs/srs_librtmp.cpp b/trunk/src/libs/srs_librtmp.cpp index 91867124d..fc747579d 100644 --- a/trunk/src/libs/srs_librtmp.cpp +++ b/trunk/src/libs/srs_librtmp.cpp @@ -100,9 +100,6 @@ struct Context SrsRawH264Stream avc_raw; SrsRawAacStream aac_raw; - // for h264 raw stream, - // @see: https://github.com/ossrs/srs/issues/66#issuecomment-62240521 - SrsBuffer h264_raw_stream; // about SPS, @see: 7.3.2.1.1, ISO_IEC_14496-10-AVC-2012.pdf, page 62 std::string h264_sps; std::string h264_pps; @@ -113,9 +110,6 @@ struct Context // @see https://github.com/ossrs/srs/issues/204 bool h264_sps_changed; bool h264_pps_changed; - // for aac raw stream, - // @see: https://github.com/ossrs/srs/issues/212#issuecomment-64146250 - SrsBuffer aac_raw_stream; // the aac sequence header. std::string aac_specific_config; @@ -666,6 +660,7 @@ extern "C"{ return ERROR_RTMP_HS_SSL_REQUIRE; #else int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; srs_assert(rtmp != NULL); Context* context = (Context*)rtmp; @@ -676,7 +671,9 @@ extern "C"{ srs_freep(context->rtmp); context->rtmp = new SrsRtmpClient(context->skt); - if ((ret = context->rtmp->complex_handshake()) != ERROR_SUCCESS) { + if ((err = context->rtmp->complex_handshake()) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -687,6 +684,7 @@ extern "C"{ int srs_rtmp_do_simple_handshake(srs_rtmp_t rtmp) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; srs_assert(rtmp != NULL); Context* context = (Context*)rtmp; @@ -697,16 +695,17 @@ extern "C"{ srs_freep(context->rtmp); context->rtmp = new SrsRtmpClient(context->skt); - if ((ret = context->rtmp->simple_handshake()) != ERROR_SUCCESS) { + if ((err = context->rtmp->simple_handshake()) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } return ret; } - int srs_rtmp_set_connect_args(srs_rtmp_t rtmp, - const char* tcUrl, const char* swfUrl, const char* pageUrl, srs_amf0_t args - ) { + int srs_rtmp_set_connect_args(srs_rtmp_t rtmp, const char* tcUrl, const char* swfUrl, const char* pageUrl, srs_amf0_t args) + { int ret = ERROR_SUCCESS; srs_assert(rtmp != NULL); @@ -746,6 +745,7 @@ extern "C"{ int srs_rtmp_connect_app(srs_rtmp_t rtmp) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; srs_assert(rtmp != NULL); Context* context = (Context*)rtmp; @@ -767,7 +767,9 @@ extern "C"{ } Context* c = context; - if ((ret = context->rtmp->connect_app(c->app, tcUrl, c->req, true, &c->si)) != ERROR_SUCCESS) { + if ((err = context->rtmp->connect_app(c->app, tcUrl, c->req, true, &c->si)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -812,14 +814,20 @@ extern "C"{ int srs_rtmp_play_stream(srs_rtmp_t rtmp) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; srs_assert(rtmp != NULL); Context* context = (Context*)rtmp; - if ((ret = context->rtmp->create_stream(context->stream_id)) != ERROR_SUCCESS) { + if ((err = context->rtmp->create_stream(context->stream_id)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } - if ((ret = context->rtmp->play(context->stream, context->stream_id)) != ERROR_SUCCESS) { + + if ((err = context->rtmp->play(context->stream, context->stream_id)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -829,11 +837,14 @@ extern "C"{ int srs_rtmp_publish_stream(srs_rtmp_t rtmp) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; srs_assert(rtmp != NULL); Context* context = (Context*)rtmp; - if ((ret = context->rtmp->fmle_publish(context->stream, context->stream_id)) != ERROR_SUCCESS) { + if ((err = context->rtmp->fmle_publish(context->stream, context->stream_id)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -881,11 +892,8 @@ extern "C"{ { int ret = ERROR_SUCCESS; - SrsBuffer aggregate_stream; - SrsBuffer* stream = &aggregate_stream; - if ((ret = stream->initialize(msg->payload, msg->size)) != ERROR_SUCCESS) { - return ret; - } + SrsBuffer* stream = new SrsBuffer(msg->payload, msg->size); + SrsAutoFree(SrsBuffer, stream); // the aggregate message always use abs time. int delta = -1; @@ -1035,6 +1043,7 @@ extern "C"{ *size = 0; int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; srs_assert(rtmp != NULL); Context* context = (Context*)rtmp; @@ -1050,7 +1059,9 @@ extern "C"{ } // read from protocol sdk. - if (!msg && (ret = context->rtmp->recv_message(&msg)) != ERROR_SUCCESS) { + if (!msg && (err = context->rtmp->recv_message(&msg)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -1079,20 +1090,25 @@ extern "C"{ int srs_rtmp_write_packet(srs_rtmp_t rtmp, char type, uint32_t timestamp, char* data, int size) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; srs_assert(rtmp != NULL); Context* context = (Context*)rtmp; SrsSharedPtrMessage* msg = NULL; - if ((ret = srs_rtmp_create_msg(type, timestamp, data, size, context->stream_id, &msg)) != ERROR_SUCCESS) { + if ((err = srs_rtmp_create_msg(type, timestamp, data, size, context->stream_id, &msg)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } srs_assert(msg); // send out encoded msg. - if ((ret = context->rtmp->send_and_free_message(msg, context->stream_id)) != ERROR_SUCCESS) { + if ((err = context->rtmp->send_and_free_message(msg, context->stream_id)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -1106,19 +1122,17 @@ extern "C"{ srs_bool srs_rtmp_is_onMetaData(char type, char* data, int size) { - int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; if (type != SRS_RTMP_TYPE_SCRIPT) { return false; } - SrsBuffer stream; - if ((ret = stream.initialize(data, size)) != ERROR_SUCCESS) { - return false; - } + SrsBuffer stream(data, size); std::string name; - if ((ret = srs_amf0_read_string(&stream, name)) != ERROR_SUCCESS) { + if ((err = srs_amf0_read_string(&stream, name)) != srs_success) { + srs_freep(err); return false; } @@ -1139,10 +1153,13 @@ extern "C"{ int srs_write_audio_raw_frame(Context* context, char* frame, int frame_size, SrsRawAacStreamCodec* codec, uint32_t timestamp) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; char* data = NULL; int size = 0; - if ((ret = context->aac_raw.mux_aac2flv(frame, frame_size, codec, timestamp, &data, &size)) != ERROR_SUCCESS) { + if ((err = context->aac_raw.mux_aac2flv(frame, frame_size, codec, timestamp, &data, &size)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -1155,11 +1172,14 @@ extern "C"{ int srs_write_aac_adts_frame(Context* context, SrsRawAacStreamCodec* codec, char* frame, int frame_size, uint32_t timestamp) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; // send out aac sequence header if not sent. if (context->aac_specific_config.empty()) { std::string sh; - if ((ret = context->aac_raw.mux_sequence_header(codec, sh)) != ERROR_SUCCESS) { + if ((err = context->aac_raw.mux_sequence_header(codec, sh)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } context->aac_specific_config = sh; @@ -1182,17 +1202,18 @@ extern "C"{ char sound_size, char sound_type, char* frames, int frames_size, uint32_t timestamp ) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; - SrsBuffer* stream = &context->aac_raw_stream; - if ((ret = stream->initialize(frames, frames_size)) != ERROR_SUCCESS) { - return ret; - } + SrsBuffer* stream = new SrsBuffer(frames, frames_size); + SrsAutoFree(SrsBuffer, stream); while (!stream->empty()) { char* frame = NULL; int frame_size = 0; SrsRawAacStreamCodec codec; - if ((ret = context->aac_raw.adts_demux(stream, &frame, &frame_size, codec)) != ERROR_SUCCESS) { + if ((err = context->aac_raw.adts_demux(stream, &frame, &frame_size, codec)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -1251,12 +1272,7 @@ extern "C"{ */ srs_bool srs_aac_is_adts(char* aac_raw_data, int ac_raw_size) { - SrsBuffer stream; - - if (stream.initialize(aac_raw_data, ac_raw_size) != ERROR_SUCCESS) { - return false; - } - + SrsBuffer stream(aac_raw_data, ac_raw_size); return srs_aac_startswith_adts(&stream); } @@ -1294,6 +1310,7 @@ extern "C"{ int srs_write_h264_ipb_frame(Context* context, char* frame, int frame_size, uint32_t dts, uint32_t pts) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; // when sps or pps not sent, ignore the packet. // @see https://github.com/ossrs/srs/issues/203 @@ -1321,14 +1338,18 @@ extern "C"{ } std::string ibp; - if ((ret = context->avc_raw.mux_ipb_frame(frame, frame_size, ibp)) != ERROR_SUCCESS) { + if ((err = context->avc_raw.mux_ipb_frame(frame, frame_size, ibp)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } int8_t avc_packet_type = SrsVideoAvcFrameTraitNALU; char* flv = NULL; int nb_flv = 0; - if ((ret = context->avc_raw.mux_avc2flv(ibp, frame_type, avc_packet_type, dts, pts, &flv, &nb_flv)) != ERROR_SUCCESS) { + if ((err = context->avc_raw.mux_avc2flv(ibp, frame_type, avc_packet_type, dts, pts, &flv, &nb_flv)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -1343,6 +1364,7 @@ extern "C"{ int srs_write_h264_sps_pps(Context* context, uint32_t dts, uint32_t pts) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; // send when sps or pps changed. if (!context->h264_sps_changed && !context->h264_pps_changed) { @@ -1351,7 +1373,9 @@ extern "C"{ // h264 raw to h264 packet. std::string sh; - if ((ret = context->avc_raw.mux_sequence_header(context->h264_sps, context->h264_pps, dts, pts, sh)) != ERROR_SUCCESS) { + if ((err = context->avc_raw.mux_sequence_header(context->h264_sps, context->h264_pps, dts, pts, sh)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -1360,7 +1384,9 @@ extern "C"{ int8_t avc_packet_type = SrsVideoAvcFrameTraitSequenceHeader; char* flv = NULL; int nb_flv = 0; - if ((ret = context->avc_raw.mux_avc2flv(sh, frame_type, avc_packet_type, dts, pts, &flv, &nb_flv)) != ERROR_SUCCESS) { + if ((err = context->avc_raw.mux_avc2flv(sh, frame_type, avc_packet_type, dts, pts, &flv, &nb_flv)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -1380,6 +1406,7 @@ extern "C"{ int srs_write_h264_raw_frame(Context* context, char* frame, int frame_size, uint32_t dts, uint32_t pts) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; // empty frame. if (frame_size <= 0) { @@ -1389,7 +1416,9 @@ extern "C"{ // for sps if (context->avc_raw.is_sps(frame, frame_size)) { std::string sps; - if ((ret = context->avc_raw.sps_demux(frame, frame_size, sps)) != ERROR_SUCCESS) { + if ((err = context->avc_raw.sps_demux(frame, frame_size, sps)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -1405,7 +1434,9 @@ extern "C"{ // for pps if (context->avc_raw.is_pps(frame, frame_size)) { std::string pps; - if ((ret = context->avc_raw.pps_demux(frame, frame_size, pps)) != ERROR_SUCCESS) { + if ((err = context->avc_raw.pps_demux(frame, frame_size, pps)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -1445,6 +1476,7 @@ extern "C"{ int srs_h264_write_raw_frames(srs_rtmp_t rtmp, char* frames, int frames_size, uint32_t dts, uint32_t pts) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; srs_assert(frames != NULL); srs_assert(frames_size > 0); @@ -1452,9 +1484,8 @@ extern "C"{ srs_assert(rtmp != NULL); Context* context = (Context*)rtmp; - if ((ret = context->h264_raw_stream.initialize(frames, frames_size)) != ERROR_SUCCESS) { - return ret; - } + SrsBuffer* stream = new SrsBuffer(frames, frames_size); + SrsAutoFree(SrsBuffer, stream); // use the last error // @see https://github.com/ossrs/srs/issues/203 @@ -1462,10 +1493,12 @@ extern "C"{ int error_code_return = ret; // send each frame. - while (!context->h264_raw_stream.empty()) { + while (!stream->empty()) { char* frame = NULL; int frame_size = 0; - if ((ret = context->avc_raw.annexb_demux(&context->h264_raw_stream, &frame, &frame_size)) != ERROR_SUCCESS) { + if ((err = context->avc_raw.annexb_demux(stream, &frame, &frame_size)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -1511,11 +1544,7 @@ extern "C"{ srs_bool srs_h264_startswith_annexb(char* h264_raw_data, int h264_raw_size, int* pnb_start_code) { - SrsBuffer stream; - if (stream.initialize(h264_raw_data, h264_raw_size) != ERROR_SUCCESS) { - return false; - } - + SrsBuffer stream(h264_raw_data, h264_raw_size); return srs_avc_startswith_annexb(&stream, pnb_start_code); } @@ -1528,10 +1557,13 @@ extern "C"{ srs_mp4_t srs_mp4_open_read(const char* file) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; Mp4Context* mp4 = new Mp4Context(); - if ((ret = mp4->reader.open(file)) != ERROR_SUCCESS) { + if ((err = mp4->reader.open(file)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); srs_human_error("Open MP4 file failed, ret=%d", ret); srs_freep(mp4); @@ -1550,10 +1582,13 @@ extern "C"{ int srs_mp4_init_demuxer(srs_mp4_t mp4) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; Mp4Context* context = (Mp4Context*)mp4; - if ((ret = context->dec.initialize(&context->reader)) != ERROR_SUCCESS) { + if ((err = context->dec.initialize(&context->reader)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -1565,12 +1600,15 @@ extern "C"{ s->sample = NULL; int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; Mp4Context* context = (Mp4Context*)mp4; SrsMp4Decoder* dec = &context->dec; SrsMp4HandlerType ht = SrsMp4HandlerTypeForbidden; - if ((ret = dec->read_sample(&ht, &s->frame_type, &s->frame_trait, &s->dts, &s->pts, &s->sample, &s->nb_sample)) != ERROR_SUCCESS) { + if ((err = dec->read_sample(&ht, &s->frame_type, &s->frame_trait, &s->dts, &s->pts, &s->sample, &s->nb_sample)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -1662,17 +1700,22 @@ extern "C"{ srs_flv_t srs_flv_open_read(const char* file) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; FlvContext* flv = new FlvContext(); - if ((ret = flv->reader.open(file)) != ERROR_SUCCESS) { + if ((err = flv->reader.open(file)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); srs_human_error("Open FLV file failed, ret=%d", ret); srs_freep(flv); return NULL; } - if ((ret = flv->dec.initialize(&flv->reader)) != ERROR_SUCCESS) { + if ((err = flv->dec.initialize(&flv->reader)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); srs_human_error("Initialize FLV demuxer failed, ret=%d", ret); srs_freep(flv); @@ -1685,17 +1728,22 @@ extern "C"{ srs_flv_t srs_flv_open_write(const char* file) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; FlvContext* flv = new FlvContext(); - if ((ret = flv->writer.open(file)) != ERROR_SUCCESS) { + if ((err = flv->writer.open(file)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); srs_human_error("Open FLV file failed, ret=%d", ret); srs_freep(flv); return NULL; } - if ((ret = flv->enc.initialize(&flv->writer)) != ERROR_SUCCESS) { + if ((err = flv->enc.initialize(&flv->writer)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); srs_human_error("Initilize FLV muxer failed, ret=%d", ret); srs_freep(flv); @@ -1714,6 +1762,7 @@ extern "C"{ int srs_flv_read_header(srs_flv_t flv, char header[9]) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; FlvContext* context = (FlvContext*)flv; @@ -1721,12 +1770,16 @@ extern "C"{ return ERROR_SYSTEM_IO_INVALID; } - if ((ret = context->dec.read_header(header)) != ERROR_SUCCESS) { + if ((err = context->dec.read_header(header)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } char ts[4]; // tag size - if ((ret = context->dec.read_previous_tag_size(ts)) != ERROR_SUCCESS) { + if ((err = context->dec.read_previous_tag_size(ts)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -1736,6 +1789,7 @@ extern "C"{ int srs_flv_read_tag_header(srs_flv_t flv, char* ptype, int32_t* pdata_size, uint32_t* ptime) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; FlvContext* context = (FlvContext*)flv; @@ -1743,7 +1797,9 @@ extern "C"{ return ERROR_SYSTEM_IO_INVALID; } - if ((ret = context->dec.read_tag_header(ptype, pdata_size, ptime)) != ERROR_SUCCESS) { + if ((err = context->dec.read_tag_header(ptype, pdata_size, ptime)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -1753,6 +1809,7 @@ extern "C"{ int srs_flv_read_tag_data(srs_flv_t flv, char* data, int32_t size) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; FlvContext* context = (FlvContext*)flv; @@ -1760,12 +1817,16 @@ extern "C"{ return ERROR_SYSTEM_IO_INVALID; } - if ((ret = context->dec.read_tag_data(data, size)) != ERROR_SUCCESS) { + if ((err = context->dec.read_tag_data(data, size)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } char ts[4]; // tag size - if ((ret = context->dec.read_previous_tag_size(ts)) != ERROR_SUCCESS) { + if ((err = context->dec.read_previous_tag_size(ts)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -1775,6 +1836,7 @@ extern "C"{ int srs_flv_write_header(srs_flv_t flv, char header[9]) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; FlvContext* context = (FlvContext*)flv; @@ -1782,7 +1844,9 @@ extern "C"{ return ERROR_SYSTEM_IO_INVALID; } - if ((ret = context->enc.write_header(header)) != ERROR_SUCCESS) { + if ((err = context->enc.write_header(header)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -1792,6 +1856,7 @@ extern "C"{ int srs_flv_write_tag(srs_flv_t flv, char type, int32_t time, char* data, int size) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; FlvContext* context = (FlvContext*)flv; @@ -1800,11 +1865,23 @@ extern "C"{ } if (type == SRS_RTMP_TYPE_AUDIO) { - return context->enc.write_audio(time, data, size); + if ((err = context->enc.write_audio(time, data, size)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); + return ret; + } } else if (type == SRS_RTMP_TYPE_VIDEO) { - return context->enc.write_video(time, data, size); + if ((err = context->enc.write_video(time, data, size)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); + return ret; + } } else { - return context->enc.write_metadata(type, data, size); + if ((err = context->enc.write_metadata(type, data, size)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); + return ret; + } } return ret; @@ -1845,22 +1922,21 @@ extern "C"{ srs_amf0_t srs_amf0_parse(char* data, int size, int* nparsed) { - int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; srs_amf0_t amf0 = NULL; - SrsBuffer stream; - if ((ret = stream.initialize(data, size)) != ERROR_SUCCESS) { - return amf0; - } + SrsBuffer stream(data, size); SrsAmf0Any* any = NULL; - if ((ret = SrsAmf0Any::discovery(&stream, &any)) != ERROR_SUCCESS) { + if ((err = SrsAmf0Any::discovery(&stream, &any)) != srs_success) { + srs_freep(err); return amf0; } stream.skip(-1 * stream.pos()); - if ((ret = any->read(&stream)) != ERROR_SUCCESS) { + if ((err = any->read(&stream)) != srs_success) { + srs_freep(err); srs_freep(any); return amf0; } @@ -1929,15 +2005,15 @@ extern "C"{ int srs_amf0_serialize(srs_amf0_t amf0, char* data, int size) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; SrsAmf0Any* any = (SrsAmf0Any*)amf0; - SrsBuffer stream; - if ((ret = stream.initialize(data, size)) != ERROR_SUCCESS) { - return ret; - } + SrsBuffer stream(data, size); - if ((ret = any->write(&stream)) != ERROR_SUCCESS) { + if ((err = any->write(&stream)) != srs_success) { + ret = srs_error_code(err); + srs_freep(err); return ret; } diff --git a/trunk/src/main/srs_main_ingest_hls.cpp b/trunk/src/main/srs_main_ingest_hls.cpp index 393e91dee..92b2a3fa5 100644 --- a/trunk/src/main/srs_main_ingest_hls.cpp +++ b/trunk/src/main/srs_main_ingest_hls.cpp @@ -156,18 +156,14 @@ private: std::vector pieces; int64_t next_connect_time; private: - SrsBuffer* stream; SrsTsContext* context; public: SrsIngestHlsInput(SrsHttpUri* hls) { in_hls = hls; next_connect_time = 0; - - stream = new SrsBuffer(); context = new SrsTsContext(); } virtual ~SrsIngestHlsInput() { - srs_freep(stream); srs_freep(context); std::vector::iterator it; @@ -291,9 +287,8 @@ int SrsIngestHlsInput::parseTs(ISrsTsHandler* handler, char* body, int nb_body) int nb_packet = (int)nb_body / SRS_TS_PACKET_SIZE; for (int i = 0; i < nb_packet; i++) { char* p = (char*)body + (i * SRS_TS_PACKET_SIZE); - if ((ret = stream->initialize(p, SRS_TS_PACKET_SIZE)) != ERROR_SUCCESS) { - return ret; - } + SrsBuffer* stream = new SrsBuffer(p, SRS_TS_PACKET_SIZE); + SrsAutoFree(SrsBuffer, stream); // process each ts packet if ((err = context->decode(stream, handler)) != srs_success) { @@ -314,9 +309,8 @@ int SrsIngestHlsInput::parseAac(ISrsAacHandler* handler, char* body, int nb_body { int ret = ERROR_SUCCESS; - if ((ret = stream->initialize(body, nb_body)) != ERROR_SUCCESS) { - return ret; - } + SrsBuffer* stream = new SrsBuffer(body, nb_body); + SrsAutoFree(SrsBuffer, stream); // atleast 2bytes. if (!stream->require(3)) { @@ -396,7 +390,10 @@ int SrsIngestHlsInput::parseM3u8(SrsHttpUri* url, double& td, double& duration) SrsAutoFree(ISrsHttpMessage, msg); std::string body; - if ((ret = msg->body_read_all(body)) != ERROR_SUCCESS) { + if ((err = msg->body_read_all(body)) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); srs_error("read m3u8 failed. ret=%d", ret); return ret; } @@ -465,7 +462,10 @@ int SrsIngestHlsInput::parseM3u8(SrsHttpUri* url, double& td, double& duration) } srs_trace("parse sub m3u8, url=%s", m3u8_url.c_str()); - if ((ret = url->initialize(m3u8_url)) != ERROR_SUCCESS) { + if ((err = url->initialize(m3u8_url)) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -600,7 +600,10 @@ int SrsIngestHlsInput::SrsTsPiece::fetch(string m3u8) } SrsHttpUri uri; - if ((ret = uri.initialize(ts_url)) != ERROR_SUCCESS) { + if ((err = uri.initialize(ts_url)) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -621,7 +624,10 @@ int SrsIngestHlsInput::SrsTsPiece::fetch(string m3u8) srs_assert(msg); SrsAutoFree(ISrsHttpMessage, msg); - if ((ret = msg->body_read_all(body)) != ERROR_SUCCESS) { + if ((err = msg->body_read_all(body)) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); srs_error("read ts failed. ret=%d", ret); return ret; } @@ -792,21 +798,16 @@ srs_error_t SrsIngestHlsOutput::on_ts_message(SrsTsMessage* msg) int SrsIngestHlsOutput::on_aac_frame(char* frame, int frame_size, double duration) { - int ret = ERROR_SUCCESS; - srs_trace("handle aac frames, size=%dB, duration=%.2f, dts=%" PRId64, frame_size, duration, raw_aac_dts); - SrsBuffer stream; - if ((ret = stream.initialize(frame, frame_size)) != ERROR_SUCCESS) { - return ret; - } - + SrsBuffer stream(frame, frame_size); return do_on_aac_frame(&stream, duration); } int SrsIngestHlsOutput::do_on_aac_frame(SrsBuffer* avs, double duration) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; uint32_t duration_ms = (uint32_t)(duration * 1000); @@ -822,7 +823,10 @@ int SrsIngestHlsOutput::do_on_aac_frame(SrsBuffer* avs, double duration) char* frame = NULL; int frame_size = 0; SrsRawAacStreamCodec codec; - if ((ret = aac->adts_demux(avs, &frame, &frame_size, codec)) != ERROR_SUCCESS) { + if ((err = aac->adts_demux(avs, &frame, &frame_size, codec)) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -836,7 +840,10 @@ int SrsIngestHlsOutput::do_on_aac_frame(SrsBuffer* avs, double duration) // generate sh. if (aac_specific_config.empty()) { std::string sh; - if ((ret = aac->mux_sequence_header(&codec, sh)) != ERROR_SUCCESS) { + if ((err = aac->mux_sequence_header(&codec, sh)) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); return ret; } aac_specific_config = sh; @@ -905,11 +912,7 @@ int SrsIngestHlsOutput::parse_message_queue() queue.erase(it); // parse the stream. - SrsBuffer avs; - if ((ret = avs.initialize(msg->payload->bytes(), msg->payload->length())) != ERROR_SUCCESS) { - srs_error("mpegts: initialize av stream failed. ret=%d", ret); - return ret; - } + SrsBuffer avs(msg->payload->bytes(), msg->payload->length()); // publish audio or video. if (msg->channel->stream == SrsTsStreamVideoH264) { @@ -939,11 +942,7 @@ int SrsIngestHlsOutput::flush_message_queue() queue.erase(it); // parse the stream. - SrsBuffer avs; - if ((ret = avs.initialize(msg->payload->bytes(), msg->payload->length())) != ERROR_SUCCESS) { - srs_error("mpegts: initialize av stream failed. ret=%d", ret); - return ret; - } + SrsBuffer avs(msg->payload->bytes(), msg->payload->length()); // publish audio or video. if (msg->channel->stream == SrsTsStreamVideoH264) { @@ -964,6 +963,7 @@ int SrsIngestHlsOutput::flush_message_queue() int SrsIngestHlsOutput::on_ts_video(SrsTsMessage* msg, SrsBuffer* avs) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; // ts tbn to flv tbn. uint32_t dts = (uint32_t)(msg->dts / 90); @@ -976,7 +976,10 @@ int SrsIngestHlsOutput::on_ts_video(SrsTsMessage* msg, SrsBuffer* avs) while (!avs->empty()) { char* frame = NULL; int frame_size = 0; - if ((ret = avc->annexb_demux(avs, &frame, &frame_size)) != ERROR_SUCCESS) { + if ((err = avc->annexb_demux(avs, &frame, &frame_size)) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -998,7 +1001,10 @@ int SrsIngestHlsOutput::on_ts_video(SrsTsMessage* msg, SrsBuffer* avs) // for sps if (avc->is_sps(frame, frame_size)) { std::string sps; - if ((ret = avc->sps_demux(frame, frame_size, sps)) != ERROR_SUCCESS) { + if ((err = avc->sps_demux(frame, frame_size, sps)) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -1013,7 +1019,10 @@ int SrsIngestHlsOutput::on_ts_video(SrsTsMessage* msg, SrsBuffer* avs) // for pps if (avc->is_pps(frame, frame_size)) { std::string pps; - if ((ret = avc->pps_demux(frame, frame_size, pps)) != ERROR_SUCCESS) { + if ((err = avc->pps_demux(frame, frame_size, pps)) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -1027,7 +1036,10 @@ int SrsIngestHlsOutput::on_ts_video(SrsTsMessage* msg, SrsBuffer* avs) // ibp frame. std::string ibp; - if ((ret = avc->mux_ipb_frame(frame, frame_size, ibp)) != ERROR_SUCCESS) { + if ((err = avc->mux_ipb_frame(frame, frame_size, ibp)) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); return ret; } ibps.append(ibp); @@ -1051,6 +1063,7 @@ int SrsIngestHlsOutput::on_ts_video(SrsTsMessage* msg, SrsBuffer* avs) int SrsIngestHlsOutput::write_h264_sps_pps(uint32_t dts, uint32_t pts) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; // when sps or pps changed, update the sequence header, // for the pps maybe not changed while sps changed. @@ -1066,7 +1079,10 @@ int SrsIngestHlsOutput::write_h264_sps_pps(uint32_t dts, uint32_t pts) // h264 raw to h264 packet. std::string sh; - if ((ret = avc->mux_sequence_header(h264_sps, h264_pps, dts, pts, sh)) != ERROR_SUCCESS) { + if ((err = avc->mux_sequence_header(h264_sps, h264_pps, dts, pts, sh)) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -1075,7 +1091,10 @@ int SrsIngestHlsOutput::write_h264_sps_pps(uint32_t dts, uint32_t pts) int8_t avc_packet_type = SrsVideoAvcFrameTraitSequenceHeader; char* flv = NULL; int nb_flv = 0; - if ((ret = avc->mux_avc2flv(sh, frame_type, avc_packet_type, dts, pts, &flv, &nb_flv)) != ERROR_SUCCESS) { + if ((err = avc->mux_avc2flv(sh, frame_type, avc_packet_type, dts, pts, &flv, &nb_flv)) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -1097,6 +1116,7 @@ int SrsIngestHlsOutput::write_h264_sps_pps(uint32_t dts, uint32_t pts) int SrsIngestHlsOutput::write_h264_ipb_frame(string ibps, SrsVideoAvcFrameType frame_type, uint32_t dts, uint32_t pts) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; // when sps or pps not sent, ignore the packet. // @see https://github.com/ossrs/srs/issues/203 @@ -1107,7 +1127,10 @@ int SrsIngestHlsOutput::write_h264_ipb_frame(string ibps, SrsVideoAvcFrameType f int8_t avc_packet_type = SrsVideoAvcFrameTraitNALU; char* flv = NULL; int nb_flv = 0; - if ((ret = avc->mux_avc2flv(ibps, frame_type, avc_packet_type, dts, pts, &flv, &nb_flv)) != ERROR_SUCCESS) { + if ((err = avc->mux_avc2flv(ibps, frame_type, avc_packet_type, dts, pts, &flv, &nb_flv)) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -1119,6 +1142,7 @@ int SrsIngestHlsOutput::write_h264_ipb_frame(string ibps, SrsVideoAvcFrameType f int SrsIngestHlsOutput::on_ts_audio(SrsTsMessage* msg, SrsBuffer* avs) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; // ts tbn to flv tbn. uint32_t dts = (uint32_t)(msg->dts / 90); @@ -1136,7 +1160,10 @@ int SrsIngestHlsOutput::on_ts_audio(SrsTsMessage* msg, SrsBuffer* avs) char* frame = NULL; int frame_size = 0; SrsRawAacStreamCodec codec; - if ((ret = aac->adts_demux(avs, &frame, &frame_size, codec)) != ERROR_SUCCESS) { + if ((err = aac->adts_demux(avs, &frame, &frame_size, codec)) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -1150,7 +1177,10 @@ int SrsIngestHlsOutput::on_ts_audio(SrsTsMessage* msg, SrsBuffer* avs) // generate sh. if (aac_specific_config.empty()) { std::string sh; - if ((ret = aac->mux_sequence_header(&codec, sh)) != ERROR_SUCCESS) { + if ((err = aac->mux_sequence_header(&codec, sh)) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); return ret; } aac_specific_config = sh; @@ -1179,10 +1209,14 @@ int SrsIngestHlsOutput::on_ts_audio(SrsTsMessage* msg, SrsBuffer* avs) int SrsIngestHlsOutput::write_audio_raw_frame(char* frame, int frame_size, SrsRawAacStreamCodec* codec, uint32_t dts) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; char* data = NULL; int size = 0; - if ((ret = aac->mux_aac2flv(frame, frame_size, codec, dts, &data, &size)) != ERROR_SUCCESS) { + if ((err = aac->mux_aac2flv(frame, frame_size, codec, dts, &data, &size)) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); return ret; } @@ -1192,6 +1226,7 @@ int SrsIngestHlsOutput::write_audio_raw_frame(char* frame, int frame_size, SrsRa int SrsIngestHlsOutput::rtmp_write_packet(char type, uint32_t timestamp, char* data, int size) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; if ((ret = connect()) != ERROR_SUCCESS) { return ret; @@ -1199,7 +1234,10 @@ int SrsIngestHlsOutput::rtmp_write_packet(char type, uint32_t timestamp, char* d SrsSharedPtrMessage* msg = NULL; - if ((ret = srs_rtmp_create_msg(type, timestamp, data, size, sdk->sid(), &msg)) != ERROR_SUCCESS) { + if ((err = srs_rtmp_create_msg(type, timestamp, data, size, sdk->sid(), &msg)) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); srs_error("mpegts: create shared ptr msg failed. ret=%d", ret); return ret; } @@ -1208,7 +1246,10 @@ int SrsIngestHlsOutput::rtmp_write_packet(char type, uint32_t timestamp, char* d srs_info("RTMP type=%d, dts=%d, size=%d", type, timestamp, size); // send out encoded msg. - if ((ret = sdk->send_and_free_message(msg)) != ERROR_SUCCESS) { + if ((err = sdk->send_and_free_message(msg)) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); close(); srs_error("send RTMP type=%d, dts=%d, size=%d failed. ret=%d", type, timestamp, size, ret); return ret; @@ -1220,6 +1261,7 @@ int SrsIngestHlsOutput::rtmp_write_packet(char type, uint32_t timestamp, char* d int SrsIngestHlsOutput::connect() { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; // Ignore when connected. if (sdk) { @@ -1234,14 +1276,20 @@ int SrsIngestHlsOutput::connect() int64_t sto = SRS_CONSTS_RTMP_PULSE_TMMS; sdk = new SrsBasicRtmpClient(url, cto, sto); - if ((ret = sdk->connect()) != ERROR_SUCCESS) { + if ((err = sdk->connect()) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); close(); srs_error("mpegts: connect %s failed, cto=%" PRId64 ", sto=%" PRId64 ". ret=%d", url.c_str(), cto, sto, ret); return ret; } // publish. - if ((ret = sdk->publish()) != ERROR_SUCCESS) { + if ((err = sdk->publish()) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); close(); srs_error("mpegts: publish %s failed. ret=%d", url.c_str(), ret); return ret; @@ -1301,7 +1349,6 @@ public: srs_error_t proxy_hls2rtmp(string hls, string rtmp) { - int ret = ERROR_SUCCESS; srs_error_t err = srs_success; // init st. @@ -1310,15 +1357,16 @@ srs_error_t proxy_hls2rtmp(string hls, string rtmp) } SrsHttpUri hls_uri, rtmp_uri; - if ((ret = hls_uri.initialize(hls)) != ERROR_SUCCESS) { - return srs_error_new(ret, "hls parse uri=%s", hls.c_str()); + if ((err = hls_uri.initialize(hls)) != srs_success) { + return srs_error_wrap(err, "hls parse uri=%s", hls.c_str()); } - if ((ret = rtmp_uri.initialize(rtmp)) != ERROR_SUCCESS) { - return srs_error_new(ret, "rtmp parse uri=%s", rtmp.c_str()); + if ((err = rtmp_uri.initialize(rtmp)) != srs_success) { + return srs_error_wrap(err, "rtmp parse uri=%s", rtmp.c_str()); } SrsIngestHlsContext context(&hls_uri, &rtmp_uri); for (;;) { + int ret = ERROR_SUCCESS; if ((ret = context.proxy()) != ERROR_SUCCESS) { return srs_error_new(ret, "proxy hls to rtmp"); } diff --git a/trunk/src/main/srs_main_mp4_parser.cpp b/trunk/src/main/srs_main_mp4_parser.cpp index 82b43a750..539b568c6 100644 --- a/trunk/src/main/srs_main_mp4_parser.cpp +++ b/trunk/src/main/srs_main_mp4_parser.cpp @@ -43,16 +43,23 @@ ISrsThreadContext* _srs_context = new SrsThreadContext(); int parse(std::string mp4_file, bool verbose) { int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; SrsFileReader fr; - if ((ret = fr.open(mp4_file)) != ERROR_SUCCESS) { + if ((err = fr.open(mp4_file)) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); srs_error("Open MP4 file failed, ret=%d", ret); return ret; } srs_trace("MP4 file open success"); SrsMp4BoxReader br; - if ((ret = br.initialize(&fr)) != ERROR_SUCCESS) { + if ((err = br.initialize(&fr)) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); srs_error("Open MP4 box reader failed, ret=%d", ret); return ret; } @@ -66,7 +73,10 @@ int parse(std::string mp4_file, bool verbose) SrsMp4Box* box = NULL; SrsAutoFree(SrsMp4Box, box); - if ((ret = br.read(stream, &box)) != ERROR_SUCCESS) { + if ((err = br.read(stream, &box)) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); if (ret != ERROR_SYSTEM_FILE_EOF) { srs_error("Read MP4 box failed, ret=%d", ret); } else { @@ -78,12 +88,18 @@ int parse(std::string mp4_file, bool verbose) SrsBuffer* buffer = new SrsBuffer(stream->bytes(), stream->length()); SrsAutoFree(SrsBuffer, buffer); - if ((ret = box->decode(buffer)) != ERROR_SUCCESS) { + if ((err = box->decode(buffer)) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); srs_error("Decode the box failed, ret=%d", ret); return ret; } - if ((ret = br.skip(box, stream)) != ERROR_SUCCESS) { + if ((err = br.skip(box, stream)) != srs_success) { + // TODO: FIXME: Use error + ret = srs_error_code(err); + srs_freep(err); srs_error("Skip MP4 box failed, ret=%d", ret); return ret; } diff --git a/trunk/src/utest/srs_utest_amf0.cpp b/trunk/src/utest/srs_utest_amf0.cpp index 38af5b2db..b65c7ed73 100644 --- a/trunk/src/utest/srs_utest_amf0.cpp +++ b/trunk/src/utest/srs_utest_amf0.cpp @@ -80,10 +80,9 @@ VOID TEST(ProtocolAMF0Test, ScenarioMain) bytes = new char[nb_bytes]; // use SrsBuffer to write props/info to binary buf. - SrsBuffer s; - EXPECT_EQ(ERROR_SUCCESS, s.initialize(bytes, nb_bytes)); - EXPECT_EQ(ERROR_SUCCESS, props->write(&s)); - EXPECT_EQ(ERROR_SUCCESS, info->write(&s)); + SrsBuffer s(bytes, nb_bytes); + EXPECT_EQ(srs_success, props->write(&s)); + EXPECT_EQ(srs_success, info->write(&s)); EXPECT_TRUE(s.empty()); // now, user can use the buf @@ -98,20 +97,19 @@ VOID TEST(ProtocolAMF0Test, ScenarioMain) ASSERT_TRUE(NULL != bytes); // use SrsBuffer to assist amf0 object to read from bytes. - SrsBuffer s; - EXPECT_EQ(ERROR_SUCCESS, s.initialize(bytes, nb_bytes)); + SrsBuffer s(bytes, nb_bytes); // decoding // if user know the schema, for instance, it's an amf0 object, // user can use specified object to decoding. SrsAmf0Object* props = SrsAmf0Any::object(); SrsAutoFree(SrsAmf0Object, props); - EXPECT_EQ(ERROR_SUCCESS, props->read(&s)); + EXPECT_EQ(srs_success, props->read(&s)); // user can use specified object to decoding. SrsAmf0Object* info = SrsAmf0Any::object(); SrsAutoFree(SrsAmf0Object, info); - EXPECT_EQ(ERROR_SUCCESS, info->read(&s)); + EXPECT_EQ(srs_success, info->read(&s)); // use the decoded data. SrsAmf0Any* prop = NULL; @@ -149,12 +147,11 @@ VOID TEST(ProtocolAMF0Test, ScenarioMain) ASSERT_TRUE(NULL != bytes); // use SrsBuffer to assist amf0 object to read from bytes. - SrsBuffer s; - EXPECT_EQ(ERROR_SUCCESS, s.initialize(bytes, nb_bytes)); + SrsBuffer s(bytes, nb_bytes); // decoding a amf0 any, for user donot know SrsAmf0Any* any = NULL; - EXPECT_EQ(ERROR_SUCCESS, srs_amf0_read_any(&s, &any)); + EXPECT_EQ(srs_success, srs_amf0_read_any(&s, &any)); SrsAutoFree(SrsAmf0Any, any); // for amf0 object @@ -526,12 +523,11 @@ VOID TEST(ProtocolAMF0Test, ApiAnyElem) */ VOID TEST(ProtocolAMF0Test, ApiAnyIO) { - SrsBuffer s; SrsAmf0Any* o = NULL; char buf[1024]; memset(buf, 0, sizeof(buf)); - EXPECT_EQ(ERROR_SUCCESS, s.initialize(buf, sizeof(buf))); + SrsBuffer s(buf, sizeof(buf)); // object eof if (true) { @@ -541,13 +537,13 @@ VOID TEST(ProtocolAMF0Test, ApiAnyIO) o = SrsAmf0Any::object_eof(); SrsAutoFree(SrsAmf0Any, o); - EXPECT_EQ(ERROR_SUCCESS, o->read(&s)); + EXPECT_EQ(srs_success, o->read(&s)); EXPECT_EQ(o->total_size(), s.pos()); EXPECT_EQ(3, s.pos()); s.skip(-1 * s.pos()); (s.data() + s.pos())[0] = 0x01; - EXPECT_NE(ERROR_SUCCESS, o->read(&s)); + EXPECT_NE(srs_success, o->read(&s)); } if (true) { s.skip(-1 * s.pos()); @@ -555,7 +551,7 @@ VOID TEST(ProtocolAMF0Test, ApiAnyIO) o = SrsAmf0Any::object_eof(); SrsAutoFree(SrsAmf0Any, o); - EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); + EXPECT_EQ(srs_success, o->write(&s)); EXPECT_EQ(o->total_size(), s.pos()); EXPECT_EQ(3, s.pos()); @@ -570,7 +566,7 @@ VOID TEST(ProtocolAMF0Test, ApiAnyIO) o = SrsAmf0Any::str("winlin"); SrsAutoFree(SrsAmf0Any, o); - EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); + EXPECT_EQ(srs_success, o->write(&s)); EXPECT_EQ(o->total_size(), s.pos()); s.skip(-1 * s.pos()); @@ -581,7 +577,7 @@ VOID TEST(ProtocolAMF0Test, ApiAnyIO) s.skip(-1 * s.pos()); (s.data() + s.pos())[3] = 'x'; - EXPECT_EQ(ERROR_SUCCESS, o->read(&s)); + EXPECT_EQ(srs_success, o->read(&s)); EXPECT_EQ(o->total_size(), s.pos()); EXPECT_STREQ("xinlin", o->to_str().c_str()); } @@ -593,14 +589,14 @@ VOID TEST(ProtocolAMF0Test, ApiAnyIO) o = SrsAmf0Any::number(10); SrsAutoFree(SrsAmf0Any, o); - EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); + EXPECT_EQ(srs_success, o->write(&s)); EXPECT_EQ(o->total_size(), s.pos()); s.skip(-1 * s.pos()); EXPECT_EQ(0, s.read_1bytes()); s.skip(-1 * s.pos()); - EXPECT_EQ(ERROR_SUCCESS, o->read(&s)); + EXPECT_EQ(srs_success, o->read(&s)); EXPECT_EQ(o->total_size(), s.pos()); EXPECT_DOUBLE_EQ(10, o->to_number()); } @@ -612,14 +608,14 @@ VOID TEST(ProtocolAMF0Test, ApiAnyIO) o = SrsAmf0Any::boolean(true); SrsAutoFree(SrsAmf0Any, o); - EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); + EXPECT_EQ(srs_success, o->write(&s)); EXPECT_EQ(o->total_size(), s.pos()); s.skip(-1 * s.pos()); EXPECT_EQ(1, s.read_1bytes()); s.skip(-1 * s.pos()); - EXPECT_EQ(ERROR_SUCCESS, o->read(&s)); + EXPECT_EQ(srs_success, o->read(&s)); EXPECT_EQ(o->total_size(), s.pos()); EXPECT_TRUE(o->to_boolean()); } @@ -629,14 +625,14 @@ VOID TEST(ProtocolAMF0Test, ApiAnyIO) o = SrsAmf0Any::boolean(false); SrsAutoFree(SrsAmf0Any, o); - EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); + EXPECT_EQ(srs_success, o->write(&s)); EXPECT_EQ(o->total_size(), s.pos()); s.skip(-1 * s.pos()); EXPECT_EQ(1, s.read_1bytes()); s.skip(-1 * s.pos()); - EXPECT_EQ(ERROR_SUCCESS, o->read(&s)); + EXPECT_EQ(srs_success, o->read(&s)); EXPECT_EQ(o->total_size(), s.pos()); EXPECT_FALSE(o->to_boolean()); } @@ -648,14 +644,14 @@ VOID TEST(ProtocolAMF0Test, ApiAnyIO) o = SrsAmf0Any::null(); SrsAutoFree(SrsAmf0Any, o); - EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); + EXPECT_EQ(srs_success, o->write(&s)); EXPECT_EQ(o->total_size(), s.pos()); s.skip(-1 * s.pos()); EXPECT_EQ(5, s.read_1bytes()); s.skip(-1 * s.pos()); - EXPECT_EQ(ERROR_SUCCESS, o->read(&s)); + EXPECT_EQ(srs_success, o->read(&s)); EXPECT_EQ(o->total_size(), s.pos()); EXPECT_TRUE(o->is_null()); } @@ -667,14 +663,14 @@ VOID TEST(ProtocolAMF0Test, ApiAnyIO) o = SrsAmf0Any::undefined(); SrsAutoFree(SrsAmf0Any, o); - EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); + EXPECT_EQ(srs_success, o->write(&s)); EXPECT_EQ(o->total_size(), s.pos()); s.skip(-1 * s.pos()); EXPECT_EQ(6, s.read_1bytes()); s.skip(-1 * s.pos()); - EXPECT_EQ(ERROR_SUCCESS, o->read(&s)); + EXPECT_EQ(srs_success, o->read(&s)); EXPECT_EQ(o->total_size(), s.pos()); EXPECT_TRUE(o->is_undefined()); } @@ -686,13 +682,13 @@ VOID TEST(ProtocolAMF0Test, ApiAnyIO) o = SrsAmf0Any::str("winlin"); SrsAutoFree(SrsAmf0Any, o); - EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); + EXPECT_EQ(srs_success, o->write(&s)); EXPECT_EQ(o->total_size(), s.pos()); s.skip(-1 * s.pos()); SrsAmf0Any* po = NULL; - EXPECT_EQ(ERROR_SUCCESS, srs_amf0_read_any(&s, &po)); + EXPECT_EQ(srs_success, srs_amf0_read_any(&s, &po)); ASSERT_TRUE(NULL != po); SrsAutoFree(SrsAmf0Any, po); ASSERT_TRUE(po->is_string()); @@ -706,13 +702,13 @@ VOID TEST(ProtocolAMF0Test, ApiAnyIO) o = SrsAmf0Any::number(10); SrsAutoFree(SrsAmf0Any, o); - EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); + EXPECT_EQ(srs_success, o->write(&s)); EXPECT_EQ(o->total_size(), s.pos()); s.skip(-1 * s.pos()); SrsAmf0Any* po = NULL; - EXPECT_EQ(ERROR_SUCCESS, srs_amf0_read_any(&s, &po)); + EXPECT_EQ(srs_success, srs_amf0_read_any(&s, &po)); ASSERT_TRUE(NULL != po); SrsAutoFree(SrsAmf0Any, po); ASSERT_TRUE(po->is_number()); @@ -726,13 +722,13 @@ VOID TEST(ProtocolAMF0Test, ApiAnyIO) o = SrsAmf0Any::boolean(true); SrsAutoFree(SrsAmf0Any, o); - EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); + EXPECT_EQ(srs_success, o->write(&s)); EXPECT_EQ(o->total_size(), s.pos()); s.skip(-1 * s.pos()); SrsAmf0Any* po = NULL; - EXPECT_EQ(ERROR_SUCCESS, srs_amf0_read_any(&s, &po)); + EXPECT_EQ(srs_success, srs_amf0_read_any(&s, &po)); ASSERT_TRUE(NULL != po); SrsAutoFree(SrsAmf0Any, po); ASSERT_TRUE(po->is_boolean()); @@ -746,13 +742,13 @@ VOID TEST(ProtocolAMF0Test, ApiAnyIO) o = SrsAmf0Any::null(); SrsAutoFree(SrsAmf0Any, o); - EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); + EXPECT_EQ(srs_success, o->write(&s)); EXPECT_EQ(o->total_size(), s.pos()); s.skip(-1 * s.pos()); SrsAmf0Any* po = NULL; - EXPECT_EQ(ERROR_SUCCESS, srs_amf0_read_any(&s, &po)); + EXPECT_EQ(srs_success, srs_amf0_read_any(&s, &po)); ASSERT_TRUE(NULL != po); SrsAutoFree(SrsAmf0Any, po); ASSERT_TRUE(po->is_null()); @@ -765,13 +761,13 @@ VOID TEST(ProtocolAMF0Test, ApiAnyIO) o = SrsAmf0Any::undefined(); SrsAutoFree(SrsAmf0Any, o); - EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); + EXPECT_EQ(srs_success, o->write(&s)); EXPECT_EQ(o->total_size(), s.pos()); s.skip(-1 * s.pos()); SrsAmf0Any* po = NULL; - EXPECT_EQ(ERROR_SUCCESS, srs_amf0_read_any(&s, &po)); + EXPECT_EQ(srs_success, srs_amf0_read_any(&s, &po)); ASSERT_TRUE(NULL != po); SrsAutoFree(SrsAmf0Any, po); ASSERT_TRUE(po->is_undefined()); @@ -782,52 +778,52 @@ VOID TEST(ProtocolAMF0Test, ApiAnyIO) s.skip(-1 * s.pos()); o = SrsAmf0Any::str("winlin"); - EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); + EXPECT_EQ(srs_success, o->write(&s)); srs_freep(o); o = SrsAmf0Any::number(10); - EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); + EXPECT_EQ(srs_success, o->write(&s)); srs_freep(o); o = SrsAmf0Any::boolean(true); - EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); + EXPECT_EQ(srs_success, o->write(&s)); srs_freep(o); o = SrsAmf0Any::null(); - EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); + EXPECT_EQ(srs_success, o->write(&s)); srs_freep(o); o = SrsAmf0Any::undefined(); - EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); + EXPECT_EQ(srs_success, o->write(&s)); srs_freep(o); s.skip(-1 * s.pos()); SrsAmf0Any* po = NULL; - EXPECT_EQ(ERROR_SUCCESS, srs_amf0_read_any(&s, &po)); + EXPECT_EQ(srs_success, srs_amf0_read_any(&s, &po)); ASSERT_TRUE(NULL != po); ASSERT_TRUE(po->is_string()); EXPECT_STREQ("winlin", po->to_str().c_str()); srs_freep(po); - EXPECT_EQ(ERROR_SUCCESS, srs_amf0_read_any(&s, &po)); + EXPECT_EQ(srs_success, srs_amf0_read_any(&s, &po)); ASSERT_TRUE(NULL != po); ASSERT_TRUE(po->is_number()); EXPECT_DOUBLE_EQ(10, po->to_number()); srs_freep(po); - EXPECT_EQ(ERROR_SUCCESS, srs_amf0_read_any(&s, &po)); + EXPECT_EQ(srs_success, srs_amf0_read_any(&s, &po)); ASSERT_TRUE(NULL != po); ASSERT_TRUE(po->is_boolean()); EXPECT_TRUE(po->to_boolean()); srs_freep(po); - EXPECT_EQ(ERROR_SUCCESS, srs_amf0_read_any(&s, &po)); + EXPECT_EQ(srs_success, srs_amf0_read_any(&s, &po)); ASSERT_TRUE(NULL != po); ASSERT_TRUE(po->is_null()); srs_freep(po); - EXPECT_EQ(ERROR_SUCCESS, srs_amf0_read_any(&s, &po)); + EXPECT_EQ(srs_success, srs_amf0_read_any(&s, &po)); ASSERT_TRUE(NULL != po); ASSERT_TRUE(po->is_undefined()); srs_freep(po); @@ -837,20 +833,19 @@ VOID TEST(ProtocolAMF0Test, ApiAnyIO) /** * to get the type identity */ -VOID TEST(ProtocolAMF0Test, ApiAnyTypeAssert) +VOID TEST(ProtocolAMF0Test, ApiAnyTypeAssert) { - SrsBuffer s; SrsAmf0Any* o = NULL; char buf[1024]; memset(buf, 0, sizeof(buf)); - EXPECT_EQ(ERROR_SUCCESS, s.initialize(buf, sizeof(buf))); + SrsBuffer s(buf, sizeof(buf)); // read any if (true) { s.skip(-1 * s.pos()); (s.data() + s.pos())[0] = 0x12; - EXPECT_NE(ERROR_SUCCESS, srs_amf0_read_any(&s, &o)); + EXPECT_NE(srs_success, srs_amf0_read_any(&s, &o)); EXPECT_TRUE(NULL == o); srs_freep(o); } @@ -902,7 +897,7 @@ VOID TEST(ProtocolAMF0Test, ApiAnyTypeAssert) o = SrsAmf0Any::object(); SrsAutoFree(SrsAmf0Any, o); s.skip(-1 * s.pos()); - EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); + EXPECT_EQ(srs_success, o->write(&s)); EXPECT_EQ(1+3, s.pos()); } @@ -911,7 +906,7 @@ VOID TEST(ProtocolAMF0Test, ApiAnyTypeAssert) o = SrsAmf0Any::ecma_array(); SrsAutoFree(SrsAmf0Any, o); s.skip(-1 * s.pos()); - EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); + EXPECT_EQ(srs_success, o->write(&s)); EXPECT_EQ(1+4+3, s.pos()); } @@ -920,7 +915,7 @@ VOID TEST(ProtocolAMF0Test, ApiAnyTypeAssert) o = SrsAmf0Any::strict_array(); SrsAutoFree(SrsAmf0Any, o); s.skip(-1 * s.pos()); - EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); + EXPECT_EQ(srs_success, o->write(&s)); EXPECT_EQ(1+4, s.pos()); } } @@ -1092,11 +1087,9 @@ VOID TEST(ProtocolAMF0Test, ApiEcmaArrayProps) */ VOID TEST(ProtocolAMF0Test, ApiStrictArray) { - SrsBuffer s; - char buf[1024]; memset(buf, 0, sizeof(buf)); - EXPECT_EQ(ERROR_SUCCESS, s.initialize(buf, sizeof(buf))); + SrsBuffer s(buf, sizeof(buf)); SrsAmf0StrictArray* o = NULL; @@ -1138,7 +1131,7 @@ VOID TEST(ProtocolAMF0Test, ApiStrictArray) SrsAutoFree(SrsAmf0StrictArray, o); s.skip(-1 * s.pos()); - EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); + EXPECT_EQ(srs_success, o->write(&s)); EXPECT_EQ(5, s.pos()); s.skip(-1 * s.pos()); @@ -1153,7 +1146,7 @@ VOID TEST(ProtocolAMF0Test, ApiStrictArray) o->append(SrsAmf0Any::number(0)); s.skip(-1 * s.pos()); - EXPECT_EQ(ERROR_SUCCESS, o->write(&s)); + EXPECT_EQ(srs_success, o->write(&s)); EXPECT_EQ(5 + SrsAmf0Size::number(), s.pos()); } } diff --git a/trunk/src/utest/srs_utest_kernel.cpp b/trunk/src/utest/srs_utest_kernel.cpp index dafa389f8..84a5165eb 100644 --- a/trunk/src/utest/srs_utest_kernel.cpp +++ b/trunk/src/utest/srs_utest_kernel.cpp @@ -44,13 +44,11 @@ MockSrsFileWriter::~MockSrsFileWriter() srs_freep(data); } -int MockSrsFileWriter::open(string /*file*/) +srs_error_t MockSrsFileWriter::open(string /*file*/) { - int ret = ERROR_SUCCESS; - offset = 0; - return ret; + return srs_success; } void MockSrsFileWriter::close() @@ -68,10 +66,8 @@ int64_t MockSrsFileWriter::tellg() return offset; } -int MockSrsFileWriter::write(void* buf, size_t count, ssize_t* pnwrite) +srs_error_t MockSrsFileWriter::write(void* buf, size_t count, ssize_t* pnwrite) { - int ret = ERROR_SUCCESS; - int size = srs_min(MAX_MOCK_DATA_SIZE - offset, (int)count); memcpy(data + offset, buf, size); @@ -82,7 +78,7 @@ int MockSrsFileWriter::write(void* buf, size_t count, ssize_t* pnwrite) offset += size; - return ret; + return srs_success; } void MockSrsFileWriter::mock_reset_offset() @@ -102,13 +98,11 @@ MockSrsFileReader::~MockSrsFileReader() srs_freep(data); } -int MockSrsFileReader::open(string /*file*/) +srs_error_t MockSrsFileReader::open(string /*file*/) { - int ret = ERROR_SUCCESS; - offset = 0; - return ret; + return srs_success; } void MockSrsFileReader::close() @@ -142,14 +136,12 @@ int64_t MockSrsFileReader::filesize() return size; } -int MockSrsFileReader::read(void* buf, size_t count, ssize_t* pnread) +srs_error_t MockSrsFileReader::read(void* buf, size_t count, ssize_t* pnread) { - int ret = ERROR_SUCCESS; - int s = srs_min(size - offset, (int)count); if (s <= 0) { - return ret; + return srs_success; } memcpy(buf, data + offset, s); @@ -160,13 +152,13 @@ int MockSrsFileReader::read(void* buf, size_t count, ssize_t* pnread) offset += s; - return ret; + return srs_success; } -int MockSrsFileReader::lseek(off_t _offset, int /*whence*/, off_t* /*seeked*/) +srs_error_t MockSrsFileReader::lseek(off_t _offset, int /*whence*/, off_t* /*seeked*/) { offset = (int)_offset; - return ERROR_SUCCESS; + return srs_success; } void MockSrsFileReader::mock_append_data(const char* _data, int _size) @@ -192,7 +184,7 @@ MockBufferReader::~MockBufferReader() { } -int MockBufferReader::read(void* buf, size_t size, ssize_t* nread) +srs_error_t MockBufferReader::read(void* buf, size_t size, ssize_t* nread) { int len = srs_min(str.length(), size); @@ -202,7 +194,7 @@ int MockBufferReader::read(void* buf, size_t size, ssize_t* nread) *nread = len; } - return ERROR_SUCCESS; + return srs_success; } #ifdef ENABLE_UTEST_KERNEL @@ -965,56 +957,13 @@ VOID TEST(KernelFlvTest, FlvVSDecoderSeek) EXPECT_TRUE(5 == fs.offset); } -/** -* test the stream utility, bytes from/to basic types. -*/ -VOID TEST(KernelStreamTest, StreamInitialize) -{ - SrsBuffer s; - char data[1024]; - - EXPECT_TRUE(ERROR_SUCCESS == s.initialize(data, 1024)); - EXPECT_TRUE(ERROR_SUCCESS != s.initialize(NULL, 1024)); - EXPECT_TRUE(ERROR_SUCCESS != s.initialize(data, 0)); - EXPECT_TRUE(ERROR_SUCCESS != s.initialize(data, -1)); -} - -/** -* test the stream utility, access data -*/ -VOID TEST(KernelStreamTest, StreamData) -{ - SrsBuffer s; - char data[1024]; - - EXPECT_TRUE(s.data() == NULL); - EXPECT_TRUE(ERROR_SUCCESS == s.initialize(data, 1024)); - EXPECT_TRUE(s.data() == data); -} - -/** -* test the stream utility, access size -*/ -VOID TEST(KernelStreamTest, StreamSize) -{ - SrsBuffer s; - char data[1024]; - - EXPECT_TRUE(s.size() == 0); - EXPECT_TRUE(ERROR_SUCCESS == s.initialize(data, 1024)); - EXPECT_TRUE(s.size() == 1024); -} - /** * test the stream utility, access pos */ VOID TEST(KernelStreamTest, StreamPos) { - SrsBuffer s; char data[1024]; - - EXPECT_TRUE(s.pos() == 0); - EXPECT_TRUE(ERROR_SUCCESS == s.initialize(data, 1024)); + SrsBuffer s(data, 1024); EXPECT_TRUE(s.pos() == 0); s.read_bytes(data, 1024); @@ -1026,11 +975,8 @@ VOID TEST(KernelStreamTest, StreamPos) */ VOID TEST(KernelStreamTest, StreamEmpty) { - SrsBuffer s; char data[1024]; - - EXPECT_TRUE(s.empty()); - EXPECT_TRUE(ERROR_SUCCESS == s.initialize(data, 1024)); + SrsBuffer s(data, 1024); EXPECT_FALSE(s.empty()); s.read_bytes(data, 1024); @@ -1042,11 +988,8 @@ VOID TEST(KernelStreamTest, StreamEmpty) */ VOID TEST(KernelStreamTest, StreamRequire) { - SrsBuffer s; char data[1024]; - - EXPECT_FALSE(s.require(1)); - EXPECT_TRUE(ERROR_SUCCESS == s.initialize(data, 1024)); + SrsBuffer s(data, 1024); EXPECT_TRUE(s.require(1)); EXPECT_TRUE(s.require(1024)); @@ -1062,10 +1005,8 @@ VOID TEST(KernelStreamTest, StreamRequire) */ VOID TEST(KernelStreamTest, StreamSkip) { - SrsBuffer s; char data[1024]; - - EXPECT_TRUE(ERROR_SUCCESS == s.initialize(data, 1024)); + SrsBuffer s(data, 1024); EXPECT_EQ(0, s.pos()); s.skip(1); @@ -1080,10 +1021,8 @@ VOID TEST(KernelStreamTest, StreamSkip) */ VOID TEST(KernelStreamTest, StreamRead1Bytes) { - SrsBuffer s; char data[1024]; - - EXPECT_TRUE(ERROR_SUCCESS == s.initialize(data, 1024)); + SrsBuffer s(data, 1024); data[0] = 0x12; data[99] = 0x13; @@ -1101,10 +1040,8 @@ VOID TEST(KernelStreamTest, StreamRead1Bytes) */ VOID TEST(KernelStreamTest, StreamRead2Bytes) { - SrsBuffer s; char data[1024]; - - EXPECT_TRUE(ERROR_SUCCESS == s.initialize(data, 1024)); + SrsBuffer s(data, 1024); data[0] = 0x01; data[1] = 0x02; @@ -1130,10 +1067,8 @@ VOID TEST(KernelStreamTest, StreamRead2Bytes) */ VOID TEST(KernelStreamTest, StreamRead3Bytes) { - SrsBuffer s; char data[1024]; - - EXPECT_TRUE(ERROR_SUCCESS == s.initialize(data, 1024)); + SrsBuffer s(data, 1024); data[0] = 0x01; data[1] = 0x02; @@ -1159,10 +1094,8 @@ VOID TEST(KernelStreamTest, StreamRead3Bytes) */ VOID TEST(KernelStreamTest, StreamRead4Bytes) { - SrsBuffer s; char data[1024]; - - EXPECT_TRUE(ERROR_SUCCESS == s.initialize(data, 1024)); + SrsBuffer s(data, 1024); data[0] = 0x01; data[1] = 0x02; @@ -1188,10 +1121,8 @@ VOID TEST(KernelStreamTest, StreamRead4Bytes) */ VOID TEST(KernelStreamTest, StreamRead8Bytes) { - SrsBuffer s; char data[1024]; - - EXPECT_TRUE(ERROR_SUCCESS == s.initialize(data, 1024)); + SrsBuffer s(data, 1024); data[0] = 0x01; data[1] = 0x02; @@ -1227,10 +1158,8 @@ VOID TEST(KernelStreamTest, StreamRead8Bytes) */ VOID TEST(KernelStreamTest, StreamReadString) { - SrsBuffer s; char data[] = "Hello, world!"; - - EXPECT_TRUE(ERROR_SUCCESS == s.initialize(data, sizeof(data) - 1)); + SrsBuffer s(data, sizeof(data) - 1); string str = s.read_string(2); EXPECT_STREQ("He", str.c_str()); @@ -1250,10 +1179,8 @@ VOID TEST(KernelStreamTest, StreamReadString) */ VOID TEST(KernelStreamTest, StreamReadBytes) { - SrsBuffer s; char data[] = "Hello, world!"; - - EXPECT_TRUE(ERROR_SUCCESS == s.initialize(data, sizeof(data) - 1)); + SrsBuffer s(data, sizeof(data) - 1); char bytes[64]; s.read_bytes(bytes, 2); @@ -1277,10 +1204,8 @@ VOID TEST(KernelStreamTest, StreamReadBytes) */ VOID TEST(KernelStreamTest, StreamWrite1Bytes) { - SrsBuffer s; char data[1024]; - - EXPECT_TRUE(ERROR_SUCCESS == s.initialize(data, 1024)); + SrsBuffer s(data, 1024); s.write_1bytes(0x10); s.write_1bytes(0x11); @@ -1298,10 +1223,8 @@ VOID TEST(KernelStreamTest, StreamWrite1Bytes) */ VOID TEST(KernelStreamTest, StreamWrite2Bytes) { - SrsBuffer s; char data[1024]; - - EXPECT_TRUE(ERROR_SUCCESS == s.initialize(data, 1024)); + SrsBuffer s(data, 1024); s.write_2bytes(0x1011); s.write_2bytes(0x1213); @@ -1322,10 +1245,8 @@ VOID TEST(KernelStreamTest, StreamWrite2Bytes) */ VOID TEST(KernelStreamTest, StreamWrite3Bytes) { - SrsBuffer s; char data[1024]; - - EXPECT_TRUE(ERROR_SUCCESS == s.initialize(data, 1024)); + SrsBuffer s(data, 1024); s.write_3bytes(0x101112); s.write_3bytes(0x131415); @@ -1345,10 +1266,8 @@ VOID TEST(KernelStreamTest, StreamWrite3Bytes) */ VOID TEST(KernelStreamTest, StreamWrite4Bytes) { - SrsBuffer s; char data[1024]; - - EXPECT_TRUE(ERROR_SUCCESS == s.initialize(data, 1024)); + SrsBuffer s(data, 1024); s.write_4bytes(0x10111213); s.write_4bytes(0x14151617); @@ -1367,10 +1286,8 @@ VOID TEST(KernelStreamTest, StreamWrite4Bytes) */ VOID TEST(KernelStreamTest, StreamWrite8Bytes) { - SrsBuffer s; char data[1024]; - - EXPECT_TRUE(ERROR_SUCCESS == s.initialize(data, 1024)); + SrsBuffer s(data, 1024); s.write_8bytes(0x1011121314151617LL); s.write_8bytes(0x1819202122232425LL); @@ -1388,10 +1305,8 @@ VOID TEST(KernelStreamTest, StreamWrite8Bytes) */ VOID TEST(KernelStreamTest, StreamWriteString) { - SrsBuffer s; char data[1024]; - - EXPECT_TRUE(ERROR_SUCCESS == s.initialize(data, 1024)); + SrsBuffer s(data, 1024); char str[] = { (char)0x10, (char)0x11, (char)0x12, (char)0x13, @@ -1416,10 +1331,8 @@ VOID TEST(KernelStreamTest, StreamWriteString) */ VOID TEST(KernelStreamTest, StreamWriteBytes) { - SrsBuffer s; char data[1024]; - - EXPECT_TRUE(ERROR_SUCCESS == s.initialize(data, 1024)); + SrsBuffer s(data, 1024); char str[] = { (char)0x10, (char)0x11, (char)0x12, (char)0x13, @@ -1522,90 +1435,89 @@ VOID TEST(KernelUtilityTest, UtilityString) VOID TEST(KernelUtility, AvcUev) { int32_t v; - SrsBuffer buf; SrsBitBuffer bb; char data[32]; if (true) { data[0] = 0xff; - buf.initialize((char*)data, 1); bb.initialize(&buf); v = 1; + SrsBuffer buf((char*)data, 1); bb.initialize(&buf); v = 1; srs_avc_nalu_read_uev(&bb, v); EXPECT_EQ(0, v); } if (true) { data[0] = 0x40; - buf.initialize((char*)data, 1); bb.initialize(&buf); v = 0; + SrsBuffer buf((char*)data, 1); bb.initialize(&buf); v = 0; srs_avc_nalu_read_uev(&bb, v); EXPECT_EQ(1, v); } if (true) { data[0] = 0x60; - buf.initialize((char*)data, 1); bb.initialize(&buf); v = 0; + SrsBuffer buf((char*)data, 1); bb.initialize(&buf); v = 0; srs_avc_nalu_read_uev(&bb, v); EXPECT_EQ(2, v); } if (true) { data[0] = 0x20; - buf.initialize((char*)data, 1); bb.initialize(&buf); v = 0; + SrsBuffer buf((char*)data, 1); bb.initialize(&buf); v = 0; srs_avc_nalu_read_uev(&bb, v); EXPECT_EQ(3, v); } if (true) { data[0] = 0x28; - buf.initialize((char*)data, 1); bb.initialize(&buf); v = 0; + SrsBuffer buf((char*)data, 1); bb.initialize(&buf); v = 0; srs_avc_nalu_read_uev(&bb, v); EXPECT_EQ(4, v); } if (true) { data[0] = 0x30; - buf.initialize((char*)data, 1); bb.initialize(&buf); v = 0; + SrsBuffer buf((char*)data, 1); bb.initialize(&buf); v = 0; srs_avc_nalu_read_uev(&bb, v); EXPECT_EQ(5, v); } if (true) { data[0] = 0x38; - buf.initialize((char*)data, 1); bb.initialize(&buf); v = 0; + SrsBuffer buf((char*)data, 1); bb.initialize(&buf); v = 0; srs_avc_nalu_read_uev(&bb, v); EXPECT_EQ(6, v); } if (true) { data[0] = 0x10; - buf.initialize((char*)data, 1); bb.initialize(&buf); v = 0; + SrsBuffer buf((char*)data, 1); bb.initialize(&buf); v = 0; srs_avc_nalu_read_uev(&bb, v); EXPECT_EQ(7, v); } if (true) { data[0] = 0x12; - buf.initialize((char*)data, 1); bb.initialize(&buf); v = 0; + SrsBuffer buf((char*)data, 1); bb.initialize(&buf); v = 0; srs_avc_nalu_read_uev(&bb, v); EXPECT_EQ(8, v); } if (true) { data[0] = 0x14; - buf.initialize((char*)data, 1); bb.initialize(&buf); v = 0; + SrsBuffer buf((char*)data, 1); bb.initialize(&buf); v = 0; srs_avc_nalu_read_uev(&bb, v); EXPECT_EQ(9, v); } if (true) { data[0] = 0x01; data[1] = 0x12; - buf.initialize((char*)data, 2); bb.initialize(&buf); v = 0; + SrsBuffer buf((char*)data, 2); bb.initialize(&buf); v = 0; srs_avc_nalu_read_uev(&bb, v); EXPECT_EQ(128-1+9, v); } if (true) { data[0] = 0x00; data[1] = 0x91; data[2] = 0x00; - buf.initialize((char*)data, 3); bb.initialize(&buf); v = 0; + SrsBuffer buf((char*)data, 3); bb.initialize(&buf); v = 0; srs_avc_nalu_read_uev(&bb, v); EXPECT_EQ(256-1+0x22, v); } diff --git a/trunk/src/utest/srs_utest_kernel.hpp b/trunk/src/utest/srs_utest_kernel.hpp index 38cf129d3..7c38a9eaa 100644 --- a/trunk/src/utest/srs_utest_kernel.hpp +++ b/trunk/src/utest/srs_utest_kernel.hpp @@ -41,7 +41,7 @@ public: MockBufferReader(const char* data); virtual ~MockBufferReader(); public: - virtual int read(void* buf, size_t size, ssize_t* nread); + virtual srs_error_t read(void* buf, size_t size, ssize_t* nread); }; class MockSrsFileWriter : public SrsFileWriter @@ -53,13 +53,13 @@ public: MockSrsFileWriter(); virtual ~MockSrsFileWriter(); public: - virtual int open(std::string file); + virtual srs_error_t open(std::string file); virtual void close(); public: virtual bool is_open(); virtual int64_t tellg(); public: - virtual int write(void* buf, size_t count, ssize_t* pnwrite); + virtual srs_error_t write(void* buf, size_t count, ssize_t* pnwrite); // for mock public: void mock_reset_offset(); @@ -75,7 +75,7 @@ public: MockSrsFileReader(); virtual ~MockSrsFileReader(); public: - virtual int open(std::string file); + virtual srs_error_t open(std::string file); virtual void close(); public: virtual bool is_open(); @@ -84,8 +84,8 @@ public: virtual int64_t seek2(int64_t offset); virtual int64_t filesize(); public: - virtual int read(void* buf, size_t count, ssize_t* pnread); - virtual int lseek(off_t offset, int whence, off_t* seeked); + virtual srs_error_t read(void* buf, size_t count, ssize_t* pnread); + virtual srs_error_t lseek(off_t offset, int whence, off_t* seeked); // for mock public: // append data to current offset, modify the offset and size. diff --git a/trunk/src/utest/srs_utest_protocol.cpp b/trunk/src/utest/srs_utest_protocol.cpp index 848e2d123..c82a7bfb7 100644 --- a/trunk/src/utest/srs_utest_protocol.cpp +++ b/trunk/src/utest/srs_utest_protocol.cpp @@ -47,14 +47,14 @@ bool MockEmptyIO::is_never_timeout(int64_t /*tm*/) return true; } -int MockEmptyIO::read_fully(void* /*buf*/, size_t /*size*/, ssize_t* /*nread*/) +srs_error_t MockEmptyIO::read_fully(void* /*buf*/, size_t /*size*/, ssize_t* /*nread*/) { - return ERROR_SUCCESS; + return srs_success; } -int MockEmptyIO::write(void* /*buf*/, size_t /*size*/, ssize_t* /*nwrite*/) +srs_error_t MockEmptyIO::write(void* /*buf*/, size_t /*size*/, ssize_t* /*nwrite*/) { - return ERROR_SUCCESS; + return srs_success; } void MockEmptyIO::set_recv_timeout(int64_t /*tm*/) @@ -85,14 +85,14 @@ int64_t MockEmptyIO::get_send_bytes() return 0; } -int MockEmptyIO::writev(const iovec */*iov*/, int /*iov_size*/, ssize_t* /*nwrite*/) +srs_error_t MockEmptyIO::writev(const iovec */*iov*/, int /*iov_size*/, ssize_t* /*nwrite*/) { - return ERROR_SUCCESS; + return srs_success; } -int MockEmptyIO::read(void* /*buf*/, size_t /*size*/, ssize_t* /*nread*/) +srs_error_t MockEmptyIO::read(void* /*buf*/, size_t /*size*/, ssize_t* /*nread*/) { - return ERROR_SUCCESS; + return srs_success; } MockBufferIO::MockBufferIO() @@ -110,10 +110,10 @@ bool MockBufferIO::is_never_timeout(int64_t tm) return tm == SRS_CONSTS_NO_TMMS; } -int MockBufferIO::read_fully(void* buf, size_t size, ssize_t* nread) +srs_error_t MockBufferIO::read_fully(void* buf, size_t size, ssize_t* nread) { if (in_buffer.length() < (int)size) { - return ERROR_SOCKET_READ; + return srs_error_new(ERROR_SOCKET_READ, "read"); } memcpy(buf, in_buffer.bytes(), size); @@ -122,17 +122,17 @@ int MockBufferIO::read_fully(void* buf, size_t size, ssize_t* nread) *nread = size; } in_buffer.erase(size); - return ERROR_SUCCESS; + return srs_success; } -int MockBufferIO::write(void* buf, size_t size, ssize_t* nwrite) +srs_error_t MockBufferIO::write(void* buf, size_t size, ssize_t* nwrite) { sbytes += size; if (nwrite) { *nwrite = size; } out_buffer.append((char*)buf, size); - return ERROR_SUCCESS; + return srs_success; } void MockBufferIO::set_recv_timeout(int64_t tm) @@ -165,17 +165,17 @@ int64_t MockBufferIO::get_send_bytes() return sbytes; } -int MockBufferIO::writev(const iovec *iov, int iov_size, ssize_t* nwrite) +srs_error_t MockBufferIO::writev(const iovec *iov, int iov_size, ssize_t* nwrite) { - int ret = ERROR_SUCCESS; + srs_error_t err = srs_success; ssize_t total = 0; for (int i = 0; i